gpt4 book ai didi

xml - 使用XPATH返回多个节点属性

转载 作者:行者123 更新时间:2023-12-03 16:45:55 24 4
gpt4 key购买 nike

我需要从XML中获取数据,并且我正在使用XPath,尽管我很喜欢它,但它还是很新的东西。

我正在根据某些节点的属性来检索它们,如下所示:

/cesAlign/linkGrp[@targType='s']


现在,我想获取节点中另一个属性的值:

/cesAlign/linkGrp[@targType='s']/@fromDoc


但是,这仅返回第一个匹配。我想返回所有包含 targType ='s'的节点的属性

我当时正在考虑遍历节点列表,然后读取属性……是这样的:

expr = xpath.compile("/cesAlign/linkGrp[@targType='s']/@fromDoc");
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

int i = 0;
for (i = 0; i < nl.getLength(); i++) {
expr = xpath.compile("/@fromDoc");
System.out.println((String) expr.evaluate(nl, XPathConstants.STRING));
}


但是我不确定是否有更好,更优雅的方法来做到这一点。

这是一个示例XML:

<cesAlign version="1.0">
<linkGrp targType="s" toDoc="mt/C2004310.01029701.xml.gz" fromDoc="en/C2004310.01029701.xml.gz">
<linkGrp targType="s" toDoc="mt/C2004310.01029702.xml.gz" fromDoc="en/C2004310.01029702.xml.gz">
</cesAlign>


谢谢!

最佳答案

我认为您将必须遍历找到的匹配项并获取每个元素的属性值。使用"//cesAlign/linkGrp[@targType='s' and @fromDoc]"选择元素。
这是一个优雅的python解决方案:

#sample XML
xml = """
<cesAlign version="1.0">
<linkGrp targType="s" toDoc="mt/C2004310.01029701.xml.gz" fromDoc="en/C2004310.01029701.xml.gz"/>
<linkGrp targType="s" toDoc="mt/C2004310.01029702.xml.gz" fromDoc="en/C2004310.01029702.xml.gz"/>
<linkGrp targType="s" toDoc="mt/C2004310.01029702.xml.gz" fromDoc="en/C2004310.01029703.xml.gz"/>
<linkGrp targType="s" toDoc="mt/C2004310.01029702.xml.gz" fromDoc="en/C2004310.01029704.xml.gz"/>
<linkGrp targType="s" toDoc="mt/C2004310.01029702.xml.gz" notFromDoc = "1"/>
<linkGrp targType="s" toDoc="mt/C2004310.01029702.xml.gz" notFromDoc = "2"/>
</cesAlign>
"""
from lxml import etree
root = etree.fromstring(xml)
expr = root.xpath("//cesAlign/linkGrp[@targType='s' and @fromDoc]")
print "Matches:", len(expr)
for e in expr:
print e.attrib["fromDoc"]


输出将是:

Matches: 4
en/C2004310.01029701.xml.gz
en/C2004310.01029702.xml.gz
en/C2004310.01029703.xml.gz
en/C2004310.01029704.xml.gz

关于xml - 使用XPATH返回多个节点属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8869213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com