使用documentbuilderfactory在Python中解析XML

2024-09-30 22:14:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我在斯塔夫和斯塔克斯工作。这里使用python进行编码。我是python新手。 基本上,我的任务是使用文档工厂解析器在python中解析XML文件。在

我试图解析的XML文件是:

<?xml version="1.0" encoding="utf-8"?>
<operating_system>
  <unix_80sp1>
    <tests type="quick_sanity_test">
      <prerequisitescript>preparequicksanityscript</prerequisitescript>
      <acbuildpath>acbuildpath</acbuildpath>
      <testsuitscript>test quick sanity script</testsuitscript>
      <testdir>quick sanity dir</testdir>
    </tests>
    <machine_name>u80sp1_L004</machine_name>
    <machine_name>u80sp1_L005</machine_name>
    <machine_name>xyz.pxy.dxe.cde</machine_name>
    <vmware id="155.35.3.55">144.35.3.90</vmware>
    <vmware id="155.35.3.56">144.35.3.91</vmware>
  </unix_80sp1>
</operating_system>
  1. 我要看所有的标签。在
  2. 对于标签machine_name,我需要把它们读入一个列表中 说所有机器名都应该在一个列表machname中。 所以machname应该是[u8sp1_L004,u80sp1_L005,xyz.pxy.dxe公司.cde]阅读标签后。

  3. 我还需要所有vmware标签: 所有属性应为vmware_attr=[155.35.3.55155.35.3.56] 所有vmware值应为vmware_value=[144.35.3.90155.35.3.56]

我能够正确读取除vmware标记和计算机名称标记之外的所有标记: 我正在使用以下代码:(我不熟悉xml和vmware)。需要帮助。在

下面的代码需要修改。在

^{pr2}$

以及如何检查标记是否存在。我需要正确地编写解析代码。在


Tags: 文件代码name标记operating标签xmlmachine
1条回答
网友
1楼 · 发布于 2024-09-30 22:14:17

您需要将vmware_value、vmware_attr和machname实例化为列表而不是字符串,因此,请不要这样做:

vmware_value = None
vmware_attr = None
machname = None

这样做:

^{pr2}$

然后,要向列表添加项,请在列表上使用append方法。E、 g.:

factory = DocumentBuilderFactory.newInstance();
factory.setValidating(1)
factory.setIgnoringElementContentWhitespace(0)
builder = factory.newDocumentBuilder()
document = builder.parse(xmlFileName)

vmware_value = []
vmware_attr = []
machname = []

# Get the text value for the element with tag name "vmware"
nodeList = document.getElementsByTagName("vmware")
for i in range(nodeList.getLength()):
    node = nodeList.item(i)
    vmware_attr.append(node.attributes["id"].value)
    if node.getNodeType() == Node.ELEMENT_NODE:
        children = node.getChildNodes()
        for j in range(children.getLength()):
            thisChild = children.item(j)
            if (thisChild.getNodeType() == Node.TEXT_NODE):
                vmware_value.append(thisChild.getNodeValue())

我还对代码进行了编辑,我认为应该将正确的值附加到vmware_attr和vmware_value上。在

我不得不假设STAXxml.dom文件语法,所以如果不是这样的话,你必须适当地编辑我的建议。在

相关问题 更多 >