我在构造单个XPath语句以返回两组不同的属性时遇到问题.
例如,请使用以下XML文档:
<root>
<line name="one" alpha="a1" beta="b1"/>
<line name="two" alpha="a2" beta="b2"/>
<line name="three" alpha="a3" beta="b3"/>
</root>
Run Code Online (Sandbox Code Playgroud)
如果我使用以下XPath语句:
//@alpha
Run Code Online (Sandbox Code Playgroud)
它产生以下属性集:
alpha="a1"
alpha="a2"
alpha="a3"
Run Code Online (Sandbox Code Playgroud)
我使用什么语句来产生以下属性集:
alpha="a1"
alpha="a2"
alpha="a3"
beta="b1"
beta="b2"
beta="b3"
Run Code Online (Sandbox Code Playgroud) 我正在解析每天从供应商处收到的XML文档,它大量使用名称空间。我已将问题最小化为一个最小子集:
我需要解析一些元素,所有元素都是具有特定属性的元素的子元素。
我可以用来lxml.etree.Element.findall(TAG, root.nsmap)查找我需要检查其属性的候选节点。
然后,我试图Elements通过我知道它使用的名称来检查每个属性:这里具体是ss:Name。如果该属性的值是所需的值,那么我将更深入地研究说Element(继续做其他事情)。
我怎样才能做到这一点?
我正在解析的XML大致
<FOO xmlns="SOME_REALLY_LONG_STRING"
some gorp declaring a bunch of namespaces one of which is
xmlns:ss="THE_VERY_SAME_REALLY_LONG_STRING_AS_ROOT"
>
<child_of_foo>
....
</child_of_foo>
...
<SomethingIWant ss:Name="bar" OTHER_ATTRIBS_I_DONT_CARE_ABOUT>
....
<MoreThingsToLookAtLater>
....
</MoreThingsToLookAtLater>
....
</SomethingIWant>
...
</FOO>
Run Code Online (Sandbox Code Playgroud)
我找到了我想要的第一个元素SomethingIWant(最终我想要它们,所以我确实找到了所有元素)
import lxml
from lxml import etree
tree = etree.parse(myfilename)
root = tree.getroot()
# i want just the first one for now
my_sheet = root.findall('ss:RecordSet', root.nsmap)[0]
Run Code Online (Sandbox Code Playgroud)
现在,我想ss:Name从该元素中获取属性,以进行检查,但不确定如何?
我知道这my_sheet.attrib将向我显示原始URI,然后显示属性名称,但我不希望这样。我需要检查它是否具有用于特定命名空间属性的特定值。(由于错误,我可以完全跳过此元素)。
我尝试使用, …