加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – 使用XPath,如何根据其文本内容和属性值选择节点?

发布时间:2020-12-16 01:58:18 所属栏目:百科 来源:网络整理
导读:给定这个XML: DocTextWithQuads Page pageNumber="3" Word July Quad P1 X="84" Y="711.25" / P2 X="102.062" Y="711.25" / P3 X="102.062" Y="723.658" / P4 X="84.0" Y="723.658" / /Quad /Word Word /Word Word 30,Quad P1 X="104.812" Y="711.25" / P2
给定这个XML:
<DocText>
<WithQuads>
    <Page pageNumber="3">
        <Word>
            July
            <Quad>
                <P1 X="84" Y="711.25" />
                <P2 X="102.062" Y="711.25" />
                <P3 X="102.062" Y="723.658" />
                <P4 X="84.0" Y="723.658" />
            </Quad>
        </Word>
        <Word>
        </Word>
        <Word>
            30,<Quad>
                <P1 X="104.812" Y="711.25" />
                <P2 X="118.562" Y="711.25" />
                <P3 X="118.562" Y="723.658" />
                <P4 X="104.812" Y="723.658" />
            </Quad>
        </Word>
    </Page>
</WithQuads>

我想找到具有’July’文本和Quad / P1 / X属性大于90的节点。因此,在这种情况下,它不应该返回任何匹配。然而,如果我使用GT(>)或LT(<),我得到第一个Word元素的匹配。如果我使用eq(=),我得到没有匹配。 所以:

//Word[text()='July' and //P1[@X < 90]]

将返回true,就这样

//Word[text()='July' and //P1[@X > 90]]

我如何在P1 @ X属性上正确地限制这个?

此外,假设我有多个Page元素,用于不同的页码。我如何另外限制上述搜索以找到具有text()=’July’,P1 @ X < 90,Page @ pageNumber = 3?

一般来说,我会考虑使用一个无前缀的//作为一个不好的气味在XPath。

尝试这个:-

/DocText/WithQuads/Page/Word[text()='July' and Quad/P1/@X > 90]

你的问题是,你使用// P1 [@X< 90],它从文档的开始处开始,并开始寻找任何P1,因此它总是成立的。类似地// P1 [@X> 90]总是为真。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读