这是我拥有的XML文档:
我试图使用XPath通过其子元素
很遗憾,由于属性命名空间的定义,这里永远不会返回结果。
我错过了什么?
<products xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Product Id="1">
<Product Id="1_1">
<Attribute Name="Whatever"></Attribute>
</Product>
<Attributes xmlns="http://some/path/to/entity/def">
<Attribute Name="Identifier">NumberOne</Attribute>
</Attributes>
</Product>
<Product Id="2">
<Attributes xmlns="http://some/path/to/entity/def">
<Attribute Name="Identifier">NumberTwo</Attribute>
</Attributes>
</Product>
</products>
我试图使用XPath通过其子元素
Attributes.Attribute[Name=Identifier]
的值(例如"NumberOne"
)获取产品。
因此,在这种情况下,我期望得到以下结果:<Product Id="1">
<Product Id="1_1">
<Attribute Name="Whatever"></Attribute>
</Product>
<Attributes xmlns="http://some/path/to/entity/def">
<Attribute Name="Identifier">NumberOne</Attribute>
</Attributes>
</Product>
根据这篇解释,我尝试使用lxml库在Python中实现查询:
found_products = xml_tree_from_string.xpath('//products//Product[c:Attributes[Attribute[@Name="Identifier" and text()="NumberOne"]]]', namespaces={"c": "http://some/path/to/entity/def"})
很遗憾,由于属性命名空间的定义,这里永远不会返回结果。
我错过了什么?
c:
包括在Attribute
的后代元素中,并完成调用。请随意从我的下面的答案中提取并根据需要进行详细说明。 - kjhughes