Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何缩短lxml中的过滤查询_Xml_Parsing_Xml Parsing_Namespaces_Lxml - Fatal编程技术网

如何缩短lxml中的过滤查询

如何缩短lxml中的过滤查询,xml,parsing,xml-parsing,namespaces,lxml,Xml,Parsing,Xml Parsing,Namespaces,Lxml,我正在使用lxml解析一个具有自定义名称空间的xml。下面是xml的摘录 <abcd:ABCDCfg xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:abcd="http://www.xyzv.com/abcd"> <abcd:Section name="Features" display-name="Features" desc=“Parameters”> <abcd:Param name=“mo

我正在使用lxml解析一个具有自定义名称空间的xml。下面是xml的摘录

<abcd:ABCDCfg xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:abcd="http://www.xyzv.com/abcd">
   <abcd:Section name="Features" display-name="Features" desc=“Parameters”>
     <abcd:Param name=“mode”>
        <abcd:Type>string</abcd:Type>
        <abcd:Persistent>true</abcd:Persistent>
        <abcd:Configurable>true</abcd:Configurable>
        <abcd:ReadAccess>aup</abcd:ReadAccess>
        <abcd:WriteAccess>ap</abcd:WriteAccess>
        <abcd:DisplayName>Mode</abcd:DisplayName>
     </abcd:Param>
   </abcd:Section>
</abcd:ABCDCfg>
lxml中是否有任何东西可以让我在不使用名称空间的情况下使用lxml。差不多

sections = xmltree.findall('Section')
if (child.tag =='Param')

这将使代码真正可读。欢迎提供任何帮助。

如果这适用于您的情况,您可以在解析后从树中删除所有名称空间。我会和你一起去。Python 3中的工作示例:

import lxml.etree as ET
from io import BytesIO


data = b"""<abcd:ABCDCfg xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:abcd="http://www.xyzv.com/abcd">
   <abcd:Section name="Features" display-name="Features" desc="Parameters">
     <abcd:Param name="mode">
        <abcd:Type>string</abcd:Type>
        <abcd:Persistent>true</abcd:Persistent>
        <abcd:Configurable>true</abcd:Configurable>
        <abcd:ReadAccess>aup</abcd:ReadAccess>
        <abcd:WriteAccess>ap</abcd:WriteAccess>
        <abcd:DisplayName>Mode</abcd:DisplayName>
     </abcd:Param>
   </abcd:Section>
</abcd:ABCDCfg>"""

it = ET.iterparse(BytesIO(data))
for _, el in it:
    if '}' in el.tag:
        el.tag = el.tag.split('}', 1)[1]  # strip all namespaces
root = it.root

sections = root.findall('Section')
print(sections)
将lxml.etree作为ET导入
从io导入字节io
数据=b
一串
真的
真的
aup
美联社
模式
"""
it=ET.iterparse(字节(数据))
对于其中的el:
如果el.tag中有“}”:
el.tag=el.tag.split('}',1)[1]#去除所有名称空间
root=it.root
sections=root.findall(‘Section’)
印刷品(章节)
印刷品:

[<Element Section at 0x10636d0c8>]
[]
这意味着我们可以在树中找到元素,而无需指定名称空间

[<Element Section at 0x10636d0c8>]