使用python在现有xml文档中插入xml节点

时间:2012-06-17 19:04:13

标签: python xml

我正在尝试在此文档中插入xml节点:               

</providers>

</root>

我写了这段代码:     将xml.dom.minidom导入为m

doc = m.parse("monfichier.xml")
valeurs = doc.getElementsByTagName("providers")
element = doc.createElement("provider")
valeurs.appendChild(element)

elthost = doc.createElement("hostnamep") 
eltLTVC = doc.createElement("LocalTrustValueC")
element.appendchild(elthost)
element.appendchild(eltLTVC)

texteHost = doc.createTextNode("machinename")
texteLTVC = doc.createTextNode("23") 
eltHost.appendChild(texteHost)
eltLTVC.appendChild(texteLTVC)
doc.writexml(open("monfichier.xml","w"))

我想在最后获得这个xml文档:                                     计算机名             23

    </provider> 
</providers>

</root>

但是我得到了这个错误:     valeurs.appendChild(元件)     AttributeError:'NodeList'对象没有属性'appendChild'

2 个答案:

答案 0 :(得分:2)

根据OP对XSLT解决方案的兴趣:

这是一个完整而简短的XSLT解决方案

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="providers">
  <providers>
        <provider>
            <hostnamep>machinename</hostnamep>
            <LocalTrustValueC>23</LocalTrustValueC>
        </provider>
  </providers>
 </xsl:template>
</xsl:stylesheet>

在提供的XML文档上应用此转换时:

<root>
    <providers> 
    </providers>
</root>

产生了想要的正确结果:

<root>
   <providers>
      <provider>
         <hostnamep>machinename</hostnamep>
         <LocalTrustValueC>23</LocalTrustValueC>
      </provider>
   </providers>
</root>

答案 1 :(得分:1)

基于对http://docs.python.org/library/xml.dom.html#dom-node-objects的一些快速阅读,似乎NodeList没有appendChild方法。相反,您希望获得结果集中的第一个节点(因为您的帖子暗示只有一个节点),并在该节点上调用appendChild。

valeurs = doc.getElementsByTagName("providers").item(0)
element = doc.createElement("provider")
valeurs.appendChild(element)