【发布时间】: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