如何访问xml标记的父属性?

2024-10-01 00:35:41 发布

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

我想从的文本中提取名称,前提是其父属性在中为“enabled=true”。我无法对这种情况进行编码。 我们将不胜感激。多谢各位

我正在使用

--对于根.findall('.//stringProp[@name=“Argument.name”]'中的

我正在使用 --对于root.findall('.//stringProp[@name=“Argument.name”]…stringProp[@name=“Argument.value”]”中的b

我试过这样的方法: 对于root.findall('.//*[@enabled=“true]..//stringProp[@name=“Argument.value”]'中的b)


<Arguments enabled="true" guiclass="ArgumentsPanel" testclass="Arguments" testname="Network Variables">
    <collectionProp name="Arguments.arguments">
        <elementProp elementType="Argument" name="ir-ip-address">
            <stringProp name="Argument.name">ir-ip-address</stringProp>
            <stringProp name="Argument.value">10.97.57.164</stringProp>
            <stringProp name="Argument.desc">ISP IP address</stringProp>
            <stringProp name="Argument.metadata">=</stringProp>
         </elementProp>

         <elementProp elementType="Argument" name="ir-gui-port">
             <stringProp name="Argument.name">ir-gui-port</stringProp>
             <stringProp name="Argument.value">8001</stringProp>
             <stringProp name="Argument.desc">ISP GUI port</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
         </elementProp>
      </collectionProp>
</Arguments>

<Arguments enabled="false" guiclass="ArgumentsPanel" testclass="Arguments" testname="Network Variables">
    <collectionProp name="Arguments.arguments">
        <elementProp elementType="Argument" name="ir-ip-address">
              <stringProp name="Argument.name">ir-ip-address</stringProp>
              <stringProp name="Argument.value">10.97.57.164</stringProp>
              <stringProp name="Argument.desc">ISP IP address</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
        </elementProp>

        <elementProp elementType="Argument" name="ir-gui-port">
            <stringProp name="Argument.name">ir-gui-port</stringProp>
            <stringProp name="Argument.value">8001</stringProp>
            <stringProp name="Argument.desc">ISP GUI port</stringProp>
            <stringProp name="Argument.metadata">=</stringProp>
        </elementProp>
    </collectionProp>
</Arguments>

Tags: nameipirvalueportaddressenabledargument
1条回答
网友
1楼 · 发布于 2024-10-01 00:35:41

给你:

(注意,我已将<Argument>包装在<root>中)

from xml.etree import ElementTree as ET
from xml.etree.ElementTree import ElementTree

if __name__ == '__main__':
    raw_xml = '''
    <root>
    <Arguments enabled="true" guiclass="ArgumentsPanel" testclass="Arguments" testname="Network Variables">
        <collectionProp name="Arguments.arguments">
            <elementProp elementType="Argument" name="ir-ip-address">
                <stringProp name="Argument.name">ir-ip-address</stringProp>
                <stringProp name="Argument.value">10.97.57.164</stringProp>
                <stringProp name="Argument.desc">ISP IP address</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
             </elementProp>

             <elementProp elementType="Argument" name="ir-gui-port">
                 <stringProp name="Argument.name">ir-gui-port</stringProp>
                 <stringProp name="Argument.value">8001</stringProp>
                 <stringProp name="Argument.desc">ISP GUI port</stringProp>
                 <stringProp name="Argument.metadata">=</stringProp>
             </elementProp>
          </collectionProp>
    </Arguments>

    <Arguments enabled="false" guiclass="ArgumentsPanel" testclass="Arguments" testname="Network Variables">
        <collectionProp name="Arguments.arguments">
            <elementProp elementType="Argument" name="ir-ip-address">
                  <stringProp name="Argument.name">ir-ip-address</stringProp>
                  <stringProp name="Argument.value">10.97.57.164</stringProp>
                  <stringProp name="Argument.desc">ISP IP address</stringProp>
                  <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>

            <elementProp elementType="Argument" name="ir-gui-port">
                <stringProp name="Argument.name">ir-gui-port</stringProp>
                <stringProp name="Argument.value">8001</stringProp>
                <stringProp name="Argument.desc">ISP GUI port</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
        </collectionProp>
    </Arguments>
    </root>
    '''

    root: ElementTree = ET.fromstring(raw_xml)
    for arg in root.findall('Arguments[@enabled="true"]'):
        argname = arg.find('.//stringProp[@name="Argument.name"]').text
        argval = arg.find('.//stringProp[@name="Argument.value"]').text
        print(argname, argval)

其中打印:

ir-ip-address 10.97.57.164

相关问题 更多 >