使用 ElementTree 在 Python 中解析 xsi:type=""

Parse xsi:type="" in Python using ElementTree

我知道有几个类似的问题,但 none 的解决方案似乎有效。 我需要使用 python 解析 XML 文件。我正在使用元素树 我正在尝试打印值 X。 只要我只是在 EndPosition 中寻找 X 值,它就可以工作,但我必须在所有 MoveToType 中寻找。有没有办法将其集成到 Elementree 中。 谢谢!

XML 文件:

<MiddleCommand xsi:type="MoveToType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <CommandID>19828</CommandID>
        <MoveStraight>false</MoveStraight>
        <EndPosition>
            <Point>
                <X>528.65</X>
                <Y>33.8</Y>
                <Z>50.0</Z>
            </Point>
            <XAxis>
                <I>-0.7071067811865475</I>
                <J>-0.7071067811865477</J>
                <K>-0.0</K>
            </XAxis>
            <ZAxis>
                <I>0.0</I>
                <J>0.0</J>
                <K>-1.0</K>
            </ZAxis>
        </EndPosition>
    </MiddleCommand>

Python代码:

import xml.etree.ElementTree as ET


#tree = ET.parse("102122.955_prog_14748500480769929136.xml")
tree = ET.parse("Move_to.xml")
root = tree.getroot()


for Point in root.findall("./EndPosition/Point/X"):
    print(Point.text)



for Point in root.findall('.//{MoveToType}/Endposition/Point/X'):
    print(Point.text)

下面将为您找到任何 X

for x in root.findall(".//X"):
    print(x.text)

以下是如何使用 xsi:type="MoveToType" 获得 MiddleCommand 元素所需的 X 值。请注意,在获取属性值时需要在花括号内使用完整的命名空间 URI。

import xml.etree.ElementTree as ET
 
tree = ET.parse("Move_to.xml")  # The real XML, with several MiddleCommand elements
    
for MC in tree.findall(".//MiddleCommand"):
    # Check xsi:type value and if it equals MoveToType, find the X value
    if MC.get("{http://www.w3.org/2001/XMLSchema-instance}type") == 'MoveToType':
        X = MC.find(".//X")
        print(X.text)