从 xml 中提取所有父节点和子节点

串联

我有一个非常大的嵌套 XML 文件(下面是一个极简示例),我试图了解所有父节点和子节点是什么。

目前,我将此xml文件加载到python中的beautifulsoup并单独读取每个节点。我看到的问题是我不知道有多少父节点以及它们是什么。

找到父节点集和相应子节点的最快方法是什么?

<AppTestData>
    <Contact>
        <Name>
         <First name> foo</First name>
         <last name> bar</last name>
        </Name>
        <Age>33</Age>
        <City>York</City>
        ...
    </Contact>
    <Agent>
        <Code>A103S</Code>
        <Region>North</North>
        <Resp>Service</Resp>
        ....
    </Agent>
    <Product>
        <Cat>Electronics</Cat>
        ...
    </Product> 
</AppTestData>

希望输出:

AppTestData -> Contact -> [Name, age, city]
AppTestData -> Contact -> Name ->[first name, last name]
AppTestData -> Agent -> [Code, Region, Resp]
雅兹

试试这个。我已经修改了您的 XML 中的错误。

from simplified_scrapy import  utils, SimplifiedDoc
xml = '''
<AppTestData>
    <Contact>
        <Name>
         <First_name> foo</First_name>
         <last_name> bar</last_name>
        </Name>
        <Age>33</Age>
        <City>York</City>
        ...
    </Contact>
    <Agent>
        <Code>A103S</Code>
        <Region>North</Region>
        <Resp>Service</Resp>
        ....
    </Agent>
    <Product>
        <Cat>Electronics</Cat>
        ...
    </Product> 
</AppTestData>
'''

def printTag(lst, parent):
    if len(lst)==1:
        parent.append(lst[0].tag)
        print (parent)
        return

    flag = False
    for ele in lst:
        children = ele.children
        if not children:
            flag = True
        else:
            p = parent[:]
            p.append(ele.tag)
            printTag(children,p)
    if flag:
        parent.append(lst.tag)
        print (parent)

# xml = utils.getFileContent('data.xml')
doc  = SimplifiedDoc(xml)
root  = doc.child
children = root.children
printTag(children,[root.tag])

结果:

['AppTestData', 'Contact', 'Name', ['First_name', 'last_name']]
['AppTestData', 'Contact', ['Name', 'Age', 'City']]
['AppTestData', 'Agent', ['Code', 'Region', 'Resp']]
['AppTestData', 'Product', 'Cat']

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

解析XML,在父节点和子节点中不保留重复的名称空间

如何在Powershell中获得子XML节点的所有父节点

使用xsl读取xml标记下的所有属性和所有子节点

从第4个父节点向XML文件的所有父节点填充属性和值

从xml节点中提取值

R XML-将父节点和子节点(具有相同名称)组合到数据框中

XML数据提取,其中并非所有父节点都包含子节点

如何使用XSLT将所有父/子/孙子节点展平为单层XML

从XML的子节点获取父信息

从XML文件中提取特定节点

使用python获取xml节点的所有父级

获取Groovy中XML节点的所有子节点的值

如何同时解析父XML和子XML节点属性

从python树表示中提取父节点和子节点

如何在NotePad ++中删除折叠的XML节点(和所有子节点)

从Oracle中重复的节点中提取特定的xml节点

获取 XML 节点值和所有嵌套的列节点

从 xml 节点集中提取文本

使用xslt清除xml的所有子节点和节点值

拉取 SQL Server 中的所有子 XML 节点

如何使用powershell仅导入父节点而从xml文件中保留所有子节点?

从 XML 节点中提取数据

创建具有特定父节点值及其 XML 的所有子节点值的 Map

XML 获取带有子节点的节点

从特定的 xml 节点中提取值

使用 XSLT 从任何 xml 中提取具有值的所有文本节点的 xpath

如何通过 JAXB 解组 XML,其中父节点和子节点同名

从多个 XML 节点中提取值

如何从具有父节点和子节点的结构的 XML 文件转到只有一层的结构