【问题标题】:Matching first set of elements with xpath将第一组元素与 xpath 匹配
【发布时间】:2010-03-26 18:05:30
【问题描述】:

我有一个看起来像这样的 xml 文档。

<foo>
    <bar type="artist"/> Bob Marley </bar>
    <bar type="artist"/> Peter Tosh </bar>
    <bar type="artist"/> Marlon Wayans </bar>
</foo>
<foo>
    <bar type="artist"/> Bob Marley </bar>
    <bar type="artist"/> Peter Tosh </bar>
    <bar type="artist"/> Marlon Wayans </bar>
</foo>
<foo>
    <bar type="artist"/> Bob Marley </bar>
    <bar type="artist"/> Peter Tosh </bar>
    <bar type="artist"/> Marlon Wayans </bar>
</foo>

我想构造一个只返回第一个集合的 xpath:

<bar type="artist"/> Bob Marley </a>
<bar type="artist"/> Peter Tosh </a>
<bar type="artist"/> Marlon Wayans </a>

如何解决这个问题?我试过//bar[@type='artist'],但很明显还有更多。提前致谢。

【问题讨论】:

  • 例如,您的意思是用 关闭 标签还是只是一个错字?

标签: python xpath lxml


【解决方案1】:

为了只获取某些“索引”节点的子元素:

//foo[1]/bar[@type='artist']

C# 中的示例:

string xml =
    @"<root>
        <foo>
            <bar type='artist'> Artist 1 </bar>
            <bar type='artist'> Artist 2 </bar>
            <bar type='artist'> Artist 3 </bar>
        </foo>
        <foo>
            <bar type='artist'> Artist 1 </bar>
            <bar type='artist'> Artist 2 </bar>
            <bar type='artist'> Artist 3 </bar>
            <bar type='artist'> Artist 4 </bar>
        </foo>
    </root>";
XmlDocument document = new XmlDocument();
document.LoadXml(xml);

Assert.That(document.SelectNodes(@"/root/foo[1]/bar[@type='artist']").Count,
                                 Is.EqualTo(3));
Assert.That(document.SelectNodes(@"//foo[1]/bar[@type='artist']").Count,
                                 Is.EqualTo(3));

【讨论】:

  • 谢谢以利沙。这看起来接近我需要的。稍后会尝试一下。顺便说一句,我正在使用 pythons lxml,所以必须稍微调整一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 2015-05-23
  • 2017-05-06
  • 2016-09-08
  • 2013-05-12
  • 2018-04-15
相关资源
最近更新 更多