我想到达具有此文本的确切节点:'公司'。一旦到达此节点,我想立即到达此节点后面的下一个文本节点,因为它包含公司名称。我怎么能用Xpath做到这一点?
XML的片段是:
<div id="jobsummary">
<div id="jobsummary_content">
<h2>Job Summary</h2>
<dl>
<dt>Company</dt>
<!-- the following element is the one I'm looking for -->
<dd><span class="wrappable">Pinpoint IT Services, LLC</span></dd>
<dt>Location</dt>
<dd><span class="wrappable">Newport News, VA</span></dd>
<dt>Industries</dt>
<dd><span class="wrappable">All</span></dd>
<dt>Job Type</dt>
<dd class="multipledd"><span class="wrappable">Full Time</span></dd><dd class="multipleddlast"><span class="wrappable"> Employee</span></dd>
</dl>
</div>
</div>
我使用以下xpath获取了公司代码://*[text()= 'Company']
现在我想进入下一个文本节点。我的XML是动态的。所以我不能硬编码像<dd>
这样的节点类型来获取公司价值。但这肯定是值立即下一个文本节点。
那么如何在带有文本作为公司的节点之后立即到达文本节点?
答案 0 :(得分:3)
如果您无法对following-sibling
节点的任何部分进行硬编码,则xpath应如下所示:
//*[text()='Company']/following::*/*/text()
假设所需文本始终包含在span
等其他元素中。
要测试给定的dt
文本,请将xpath修改为
//*[text()='Company' or text()='Company:' or text()='Company Name']/following::*/*/text()
答案 1 :(得分:0)
使用//*[text()='Company']/following-sibling::dd
获取下一个dd。
您甚至可以为该dd插入条件,并进一步了解它。
following-sibling::elementName
只需查找满足您要求的同一父级别的下一个兄弟。
没有条件,如上所述,它将在'公司'之后获得下一个dd。
文字位于范围内,因此您可以尝试
//*[text()='Company']/following-sibling::dd/span
另一个明确的例子是,假设你想要获得当前所选“公司”的下一个行业文本。
拥有//*[text()='Company'
,
您可以像这样修改它://*[text()='Company']/following-sibling::dt[text()='Industries']/dd/span
当然,您可以使用变量,而不是对text()的值进行硬编码。
答案 2 :(得分:0)
您可以使用XPathNavigator并逐个继续每个节点类型
我认为XPathNavigator :: MoveToNext是您正在寻找的方法。
还有示例代码.. http://msdn.microsoft.com/en-us/library/9yxc3x24.aspx
答案 3 :(得分:0)
使用此常规XPath表达式选择所需的文本节点,即使它包含在静态未知标记元素中:
(//*[text()='Company']/following-sibling::*[1]//text())[1]
根据提供的XML文档评估此XPath表达式:
<div id="jobsummary">
<div id="jobsummary_content">
<h2>Job Summary</h2>
<dl>
<dt>Company</dt>
<!-- the following element is the one I'm looking for -->
<dd><span class="wrappable">Pinpoint IT Services, LLC</span></dd>
<dt>Location</dt>
<dd><span class="wrappable">Newport News, VA</span></dd>
<dt>Industries</dt>
<dd><span class="wrappable">All</span></dd>
<dt>Job Type</dt>
<dd class="multipledd"><span class="wrappable">Full Time</span></dd><dd class="multipleddlast"><span class="wrappable"> Employee</span></dd>
</dl>
</div>
</div>
选择了想要的文本节点:
Pinpoint IT Services, LLC
即使我们将XML更改为:
<div id="jobsummary">
<div id="jobsummary_content">
<h2>Job Summary</h2>
<div>
<p>Company</p>
<!-- the following element is the one I'm looking for -->
<dd><span class="wrappable"><b><i><u>Pinpoint IT Services, LLC</u></i></b></span></dd>
<dt>Location</dt>
<dd><span class="wrappable">Newport News, VA</span></dd>
<dt>Industries</dt>
<dd><span class="wrappable">All</span></dd>
<dt>Job Type</dt>
<dd class="multipledd"><span class="wrappable">Full Time</span></dd><dd class="multipleddlast"><span class="wrappable"> Employee</span></dd>
</div>
</div>
</div>
上面的XPath表达式仍然选择了想要的文本节点:
Pinpoint IT Services, LLC