如何在Xpath中仅提取匹配字符串的数据

时间:2011-11-28 07:53:10

标签: xpath

当在 / data / title 上应用Xpath表达式时,显示的结果为“所有连接”,“前向详细信息”,“前向详细信息”,“前向详细信息”,“转发详细信息” ','ABCD',......等。

只有当/ title为'Forward Detail'或''Forward Details'时,我的xpath表达式才必须列出......

<?xml version="1.0" encoding="UTF-8"?>
<data>
<title>All the connections</title>
<List>
    <Listitem>
        <Price>P9909</Price>
    </Listitem>
</List>
<title>Forward Detail</title>
<List>
    <Listitem>
        <Price>P45</Price>
    </Listitem>
    <Listitem>
        <Price>P98</Price>
    </Listitem>
    <Listitem>
        <Price>P68</Price>
    </Listitem>
</List>
<title>Forward Details</title>
<List>
    <Listitem>
        <Price>P452</Price>
    </Listitem>
    <Listitem>
        <Price>P983</Price>
    </Listitem>
</List>
<title>Forward Detail</title>
<List>
    <Listitem>
        <Price>P4501</Price>
    </Listitem>
    <Listitem>
        <Price>P909</Price>
    </Listitem>
    <Listitem>
        <Price>P899</Price>
    </Listitem>
</List>
<title>Forward Details</title>
<List>
    <Listitem>
        <Price>P4522</Price>
    </Listitem>
    <Listitem>
        <Price>P98311</Price>
    </Listitem>
</List>

在这个输入中,我必须提取“前向细节”和“前向细节”的价格。我不得不忽略其余部分。

请帮我构建Xpath。我正在使用Xpath 1.0

由于 RAMM

2 个答案:

答案 0 :(得分:3)

尝试下一个命令是否适合您:

/data/title[text() = "Forward Detail" or text() = "Forward Details"]/following-sibling::*[1]/descendant::Price

我的结果:

<Price>P45</Price>
<Price>P98</Price>
<Price>P68</Price>
<Price>P452</Price>
<Price>P983</Price>
<Price>P4501</Price>
<Price>P909</Price>
<Price>P899</Price>
<Price>P4522</Price>
<Price>P98311</Price>

答案 1 :(得分:2)

你需要一个条件。类似于/data/title[text() == 'Forward Detail']

但是我怀疑你确实需要名单之前的名单,对吧?您的XML设计非常糟糕(它应该在内部而不是<List>元素),但XPath足以应对。您需要查看sibling轴和pos()函数。

我必须自己查看文档,所以我只是将它作为社区维基;任何人都可以随意改写。