如何保留xml样式表?

时间:2014-10-18 17:42:41

标签: python xml

我想保留xml样式表。但它不起作用。 我使用Python自动修改用于部署hadoop的XML。

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 个答案:

答案 0 :(得分: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