【问题标题】:Search in xml using xpath in postgresql db在 postgresql db 中使用 xpath 在 xml 中搜索
【发布时间】:2017-01-13 23:11:45
【问题描述】:

我在 Postgresql 中有一个数据库,其中放置了一些用 xml 编写的文档。 我想使用 XPath 搜索它们,但我的代码不起作用。 文件是这样的:

<?xml version="1.0" standalone="yes"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
    <teiHeader>
        ....
        <revisionDesc>
            <listChange>
                <change when="2017-01-11+01:00" who="person"/>
            </listChange>
        </revisionDesc>
    </teiHeader>
    ...
</TEI>

我正在尝试获取 change 元素的 when 属性。 到目前为止我的代码:

SELECT 

xpath('TEI/n:teiHeader/n:revisionDesc/n:listChange/n:change[@when]/text()',

xml_document , '{{n,http://www.tei-c.org/ns/1.0}}') 

FROM xml_table where xml_id = 5;

它给了我这样的空结果:{},我不明白为什么

【问题讨论】:

  • 1. TEI 元素也在默认命名空间中。也为它使用前缀:n:TEI/.....。 2.change元素没有内部文本所以/text()找不到任何东西,我不知道你真正想从change元素得到什么​​
  • when属性的值,本例中为2017-01-11+01:00
  • 在这种情况下,将/text() 替换为/@when
  • 'n:TEI/n:teiHeader/n:revisionDesc/n:listChange/n:change/@when' 和 'n:TEI/n:teiHeader/n:revisionDesc/n:listChange/ n:change[@when]/@when' 给出相同的结果{},我错过了什么吗?
  • @tina 在它们前面加上/ 表示n:TEI 是你的根元素——或者完全省略n:TEI,因为xpath() 将搜索与根元素相关的结果(在xpath术语,即当前节点)。

标签: xml postgresql xpath


【解决方案1】:

如果你想引用根元素,你需要在你的xpath 查询前面加上/。或者,您可以省略n:TEI,因为xpath() 函数将搜索与根元素相关的结果(在xpath 术语中,即当前节点)。

即这些xpath 查询将找到when 属性的值:

/n:TEI/n:teiHeader/n:revisionDesc/n:listChange/n:change/@when
n:teiHeader/n:revisionDesc/n:listChange/n:change/@when

【讨论】:

    猜你喜欢
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多