【问题标题】:How to match a string to mapping xml tag using Python?如何使用 Python 将字符串匹配到映射 xml 标记?
【发布时间】:2021-06-10 05:34:03
【问题描述】:

我想从 XML 文件映射一个值。

<Country>
     <number no="2008" info="update">
          <detail name="man1" class="A1\X4">
               <string name="ruth" />
               <string name="amy" />
          </detail>
          <detail name="man2" class="A2">
               <string name="lisa" />
               <string name="graham" />
          </detail>
     </number>
</Country>

我需要通过与这个值class="A1\X4"进行映射来获取这里

T 试过这样:

stringno = 'A1'
for family in ReadXML.findall('number/detail[@class="{}"]/..'.format(stringno)):
    name = family.get('no')
    print(name)

只有在stringno="A1\X4" 时才有效。但是如果stringno = 'A1',我需要映射它。 python中是否有任何匹配函数来解决这个问题?也许是-like-contain

感谢您提供的信息。

【问题讨论】:

    标签: python string mapping match


    【解决方案1】:

    您好,使用迭代方法怎么样。

    完整代码

    import xml.etree.ElementTree as ET
    
    tree = ET.parse('myXml.xml')
    root = tree.getroot()
    
    stringno = 'A1'
    
    for family in root.findall('number'):
        for elem in family:
            if stringno in elem.get('class'):
                print('no: {}, name: {}, class: {}'.format(family.get('no'), elem.get('name'), elem.get('class')))
    

    输入

    myXml.xml

    <Country>
         <number no="2008" info="update">
              <detail name="man1" class="A1\X4">
                   <string name="ruth" />
                   <string name="amy" />
              </detail>
              <detail name="man2" class="A2">
                   <string name="lisa" />
                   <string name="graham" />
              </detail>
         </number>
         <number no="2009" info="update">
              <detail name="man1" class="A1\X5">
                   <string name="ruth" />
                   <string name="amy" />
              </detail>
              <detail name="man2" class="A3">
                   <string name="lisa" />
                   <string name="graham" />
              </detail>
         </number>
    </Country>
    

    输出

    no: 2008, name: man1, class: A1\X4
    no: 2009, name: man1, class: A1\X5
    

    【讨论】:

    • 嗨@Abhi_J 我试过了,但它返回错误TypeError: argument of type 'NoneType' is not iterable
    • 嗨@Cheries 我现在已经包含了我的完整代码和输入文件。如果您仍然收到错误,您可以分享发生错误的行。你的xml文件的结构和我的不同吗?我还尝试了您在问题中提供的输入,它按预期工作。
    • 嗨@Abhi_J 我在这里发布了我的另一个问题stackoverflow.com/q/66666821/11076819 如果您不介意,请帮我检查一下。非常感谢:)
    猜你喜欢
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    相关资源
    最近更新 更多