Html XPath获取两个标题之间的标记

Html XPath获取两个标题之间的标记,html,xml,xpath,web,wikipedia,Html,Xml,Xpath,Web,Wikipedia,我正试图编写一个小应用程序,从维基百科页面中提取内容。当我第一次想到它的时候,我认为我可以用XPath将包含内容的div作为目标,但是在研究了Wikipedia如何构建他们的文章之后,我很快发现这并不容易。当我获得页面时,分离内容的最佳方法是选择两组h2标记之间的内容 例如: 标题一些内容标题 在这里,我想得到标题集之间的div。我试着用XPath来实现这一点,但一点运气都没有。我将更深入地研究XPath,因为我认为这是实现我想要的东西所需要的,但在我深入研究它之前,我想听听你们对它的看法。XP

我正试图编写一个小应用程序,从维基百科页面中提取内容。当我第一次想到它的时候,我认为我可以用XPath将包含内容的div作为目标,但是在研究了Wikipedia如何构建他们的文章之后,我很快发现这并不容易。当我获得页面时,分离内容的最佳方法是选择两组h2标记之间的内容

例如: 标题一些内容标题

在这里,我想得到标题集之间的div。我试着用XPath来实现这一点,但一点运气都没有。我将更深入地研究XPath,因为我认为这是实现我想要的东西所需要的,但在我深入研究它之前,我想听听你们对它的看法。XPath是正确的方法还是我有其他更简单的选择?如果有什么不同的话,我会用C编写应用程序。

是的,XPath的使用是正确的——它非常适合选择XML文档的某些部分

例如,对于这个XML

<r>
   <h2>Title A</h2>
   <div>Some Content</div>
   <div>More Content</div>
   <h2>Title B</h2>
</r>
<p>Paragraph</p>  
<ul>
   <li>List1</li>
   <li>List2</li>
   <li>List3</li>
</ul>    
<p>Paragraph</p>
将选择此内容

<div>Some Content</div>
<div>More Content</div>
我上面提供的XPath很容易修改

//*[preceding-sibling::h2 = 'Summary' and following-sibling::h2 = 'Location']
要选择此XML

<r>
   <h2>Title A</h2>
   <div>Some Content</div>
   <div>More Content</div>
   <h2>Title B</h2>
</r>
<p>Paragraph</p>  
<ul>
   <li>List1</li>
   <li>List2</li>
   <li>List3</li>
</ul>    
<p>Paragraph</p>

根据要求。

在kjhughes建议的帮助下,我设法使代码正常工作

我无法使='Text'部分正常工作,但将其替换为[Text='Text']

仅此一点还不够,因为我需要的内容标题是h2标记中跨度内的位置,所以我必须稍微修改XPath

这就是我想到的:

//*[preceding-sibling::h2::following-sibling::span[text() = 'Summary'] and following-sibling::h2::following-sibling::span[text() = 'Location']]
我使用以下HTML对其进行了测试:

<div>
    <h2><span>Summary</span></h2>
    <p>Paragraph</p>
    <ul>
        <li>List1</li>
        <li>List2</li>
        <li>List3</li>
    </ul>
    <p>Paragraph</p>

    <h2><span>Location</span></h2>
    <p>Paragraph</p>
</div>
这给了我以下的结果:

<p>Paragraph</p>
<ul>
    <li>List1</li>
    <li>List2</li>
    <li>List3</li>
</ul>
<p>Paragraph</p>

那正是我要找的!谢谢:-我回家后测试后会将其标记为正确答案。我将自己的答案添加为正确答案。你的回答确实指引了我正确的方向!不客气。如果有帮助,请回答这个问题。谢谢我不知道你的意思是什么,我把我自己的答案加上了正确的答案,除非你的意思是你必须做出调整-我没有看到你在这里发布的关于这个问题的其他答案。我只是现在发布了它。被一个电话打扰了^^我很高兴你能自己解决这个问题,不过你可能想回顾一下我的更新答案,它适用于你的新样本;它比您在答案中发布的内容更简单、更可靠。例如,您将需要了解。