1

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

</providers>

</root>

我写了这段代码: import xml.dom.minidom as 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 文档:machinename 23

    </provider> 
</providers>

</root>

但我得到了这个错误: valeurs.appendChild(element) AttributeError: 'NodeList' object has no attribute 'appendChild'

4

2 回答 2

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>
于 2012-06-17T20:20:02.860 回答
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)
于 2012-06-17T20:18:02.407 回答