如何保留xml样式表?
我想保留xml-stylesheet,但它不工作。
我用Python来修改XML,以便自动部署Hadoop。
XML内容:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://c11:9000</value>
</property>
</configuration>
代码:
from xml.etree.ElementTree import ElementTree as ET
def modify_core_site(namenode_hostname):
tree = ET()
tree.parse("pkg/core-site.xml")
root = tree.getroot()
for p in root.iter("property"):
name = p.find("name").text
if name == "fs.default.name":
text = "hdfs://%s:9000" % namenode_hostname
p.find("value").text = text
tree.write("pkg/tmp.xml", encoding="utf-8", xml_declaration=True)
modify_core_site("c80")
结果:
<?xml version='1.0' encoding='utf-8'?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://c80:9000</value>
</property>
</configuration>
xml-stylesheet消失了……
我该怎么做才能保留它呢?
1 个回答
1
一种解决方案是你可以使用 lxml。一旦你解析了 XML,就可以继续查找 xsl 节点。下面是一个简单的示例:
>>> import lxml.etree
>>> doc = lxml.etree.parse('C:/downloads/xmltest.xml')
>>> root = doc.getroot()
>>> xslnode=root.getprevious().getprevious()
>>> xslnode
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
确保你加入一些异常处理,并检查这个节点是否确实存在。你可以通过以下方式检查这个节点是否是 xslt 处理指令:
>>> isinstance(xslnode, lxml.etree._XSLTProcessingInstruction)
True