【问题标题】:Validating xml node values using XPath使用 XPath 验证 xml 节点值
【发布时间】:2014-06-02 19:38:32
【问题描述】:

我的 XML 结构如下所示:

<a>
  <b>
    <c>123</c>
    <d>
      <e>
        <f>
          <g>1</g>
        </f>
        <h>
          <i>2</i>
        </h>
        <j>
          <k>
            <l>1.2</l>
          </k>
          <m>
            <n>34</n>
            <o>String</o>
          </m>
        </j>
      </e>
    </d>
  </b>
  <b>
    <c>456</c>
    <d>
      <e>
        <f>
          <g>7</g>
        </f>
        <h>
          <i>6</i>
        </h>
        <j>
          <k>
            <l>4.5</l>
          </k>
          <m>
            <n>43</n>
            <o>String 2</o>
          </m>
        </j>
      </e>
    </d>
  </b>
</a>

所有节点都是重复的,我不确定它们以哪个顺序重复 例如:节点 c:123 或 456 在我的回复中可能会排在第一位

我想比较如果 C=123 那么 g=1 就像如果 c=456 那么 g=7 以及节点b中的所有后续节点

到目前为止,我已经尝试过这个选项,但它无法断言 g 的值

选项: /a/b/[@c=123] /a/b/d/e/f/g/text()=1

【问题讨论】:

    标签: xpath


    【解决方案1】:

    类似这样的:

    boolean(/a/b/c[.="123"]/following::g[1] = "1")
    

    boolean(/a/b/c[.="456"]/following::g[1] = "7")
    

    【讨论】:

    • 感谢 Ton @Paul 真的像魔术一样工作。你能解释一下“/following::...”部分吗
    • 我希望“/following”不会尝试匹配整个响应中任何地方的 g 值。我想验证 /a/b/d/e/f/g=1 仅当 /a/b/c=123 它有时可能会发生在我的响应 /a/b/d/e/f/g=当 /a/b/c=456 时为 1。这只是我作为示例引用的一个值,但我需要在回复中声明很多这样的值,其中一些可能具有相同的值,而不管 /a/b/c 值是什么
    • 如果您知道 XML 架构,您确实可以准确测试 boolean(/a/b[c="123"]/d/e/f/g="1")
    猜你喜欢
    • 2012-06-16
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多