Postgres中的XPath,用于具有相同名称的多个根节点

时间:2014-08-25 13:13:02

标签: xml postgresql xslt xpath

我有以下情况。这是XML:

<Detect>
        <Flag>
        Yes
        </Flag>
        <Fraud_Alert_Code>
        3006
        </Fraud_Alert_Code>
        <Flag>
        No
        </Flag>
</Detect>

我使用以下查询:

xpath('//Detect/Flag/text()', response ::xml) as Flag

但它不会返回任何东西。它适用于查询中的其他值。这里唯一的问题是:是因为有2个根节点具有相同的名称吗?如果是的话,我该如何分开它们呢?

我尝试使用Flag[1]text[1]并组合使用..但没有任何作用..

1 个答案:

答案 0 :(得分:2)

您的xpath查询works

xpath()会返回xml[](或xml array),因此您可以使用array indexing来访问每个元素。但请注意,每个元素都是xml(实际上是content fragment,在您的情况下只包含文本节点),因此您可能需要将其强制转换为text(或者整个xpath()调用text[])获取文字内容的结果。

此外:

  • 你不能有多个root nodes;您的根元素Detect
  • 使用//启动xpath会使您的查询根本不关心根元素:它会找到任何Flag元素,它是任何Detect元素的子元素。< / LI>