使用python从具有相同父标记的子XML标记提取值

2024-05-02 06:55:11 发布

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

我正在尝试使用python从XML文件中提取卷数。我曾经能够使用getElementsByTagName('RollNumber')检索适当的元素。在

具有相同子标记名的父标记现在已添加到XML生成中。运行脚本时,出现一个错误,声明元素实例没有属性“data”。在

<RollNumbers>
    <RollNumber>
        <RollNumber>1234567891011120000</RollNumber>
    </RollNumber>
</RollNumbers>

我把我的剧本附在下面:

^{pr2}$

Tags: 文件实例标记脚本声明元素data属性
1条回答
网友
1楼 · 发布于 2024-05-02 06:55:11

这里的问题是假设RollNumber元素的所有子节点都是文本节点。但是,XML文档中的父元素RollNumber有另一个元素作为它的子元素之一,因此不能为元素返回{}。在

解决这个问题的一种方法是更换线路

rollTag = dom.getElementsByTagName('RollNumber')

^{pr2}$

dom.getElementsByTagName('RollNumber')返回标记名为RollNumber的所有元素。对于每一个这样的元素,我们会找到名称为RollNumber的子元素。如果找到任何节点,则element是父节点,并从返回到rollTag的列表中排除。rollTag因此只包含子RollNumber节点。在

或者,您可以替换这些线

        arn = node.data[:15]
        arcpy.AddMessage(arn)
        RollNums.append(arn)

^{4}$

这将检查RollNumber元素的子节点是否为文本节点,以及它是否包含空白以外的内容。在示例XML文档中,父元素RollNumber有两个子节点,它们都是只包含空白的文本节点,但您希望忽略它们。在

这两种方法都应该处理任意数量的嵌套RollNumber元素,前提是要读取的数据只存在于最里面的RollNumber元素中。如果父节点也包含文本,则它们的行为将不同,例如:

<RollNumbers>
    <RollNumber>
        <RollNumber>1234567891011120000</RollNumber>
        ABCDEFG
    </RollNumber>
</RollNumbers>

第一种方法将只返回123456789101112,但第二种方法也将提取文本ABCDEFG。在

相关问题 更多 >