使用XPath表达式如何在节点后立即获得第一个文本节点?

时间:2012-06-08 07:31:56

标签: xpath

我想到达具有此文本的确切节点:'公司'。一旦到达此节点,我想立即到达此节点后面的下一个文本节点,因为它包含公司名称。我怎么能用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>这样的节点类型来获取公司价值。但这肯定是值立即下一个文本节点

那么如何在带有文本作为公司的节点之后立即到达文本节点?

4 个答案:

答案 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