提问人:raywib 提问时间:11/8/2023 更新时间:11/8/2023 访问量:38
在 lxml 中设置默认命名空间映射
Set default namespace mapping in lxml
问:
当使用 lxml 处理 XML 时,我的代码最终如下所示:
from lxml import etree
NSMAP = {
'ns1': 'https://example.com/ns1/',
'ns2': 'https://example.com/ns2/',
}
root = etree.parse('/some/file.xml')
root.find(..., namespaces=NSMAP)
root.iterfind(..., namespaces=NSMAP)
root.xpath(..., namespaces=NSMAP)
有没有办法省略重复的内容并将其设置为元素的默认值?namespaces=NSMAP
答:
-1赞
MUX_ON_WINDOWS
11/8/2023
#1
您可以通过在 lxml 中为元素设置默认命名空间来简化代码。为此,可以创建包含默认命名空间的自定义 Element 类。下面是如何实现此目的的示例:
from lxml import etree
class DefaultNamespaceElement(etree.ElementBase):
def find(self, path, *args, **kwargs):
return super().find(path, namespaces=NSMAP, *args, **kwargs)
def iterfind(self, path, *args, **kwargs):
return super().iterfind(path, namespaces=NSMAP, *args, **kwargs)
def xpath(self, path, *args, **kwargs):
return super().xpath(path, namespaces=NSMAP, *args, **kwargs)
# Create a custom parser with the DefaultNamespaceElement class
parser = etree.XMLParser(target=DefaultNamespaceElement)
# Parse your XML file using the custom parser
root = etree.parse('/some/file.xml', parser)
# Now you can use the find, iterfind, and xpath methods without specifying namespaces
result = root.find('...', namespaces=NSMAP) # No need to specify namespaces=NSMAP
评论
0赞
starball
11/9/2023
在撰写这篇回答文章时,您是否使用了任何生成式 AI?
0赞
MUX_ON_WINDOWS
11/10/2023
我确实使用人工智能使我的英语句子变得好听
评论