JSON上的MarkLogic XPath,属性名称中带有“ @”符号

时间:2019-05-22 02:45:07

标签: json xpath marklogic

我正在处理MarkLogic中的一些JSON-LD数据,并且无法在带有“ @”符号的属性名称上使用XPath。例如:

{
  "@type": "News",
  "title": "some title",
  "description": "some description"
}

我的目标是检索类型为“新闻”的标题。我知道“ @”保留用于表示XPath中的属性,因此以下内容不起作用。

doc.xpath('.[@type="News"]/title')

通过xdmp.encodeForNCName函数,我看到“ @”符号在JSON表示中表示为_40_。但这仍然行不通。

doc.xpath('.[_40_type="News"]/title')

3 个答案:

答案 0 :(得分:1)

您可以在谓词中测试name()

doc.xpath('.[*[contains(name(), "@type")] = "News"]/title')

答案 1 :(得分:1)

虽然使用fn:name()也可以工作,如其他答案所建议的那样,您也可以直接在MarkLogic XPath中使用有趣的拼写来寻址节点。可能与官方XPath标准本身存在偏差,但MarkLogic允许编写类似以下内容的表达式:

doc.xpath('node("@type")[. eq "News"]/title'

对于包含空格等的JSON属性非常有用。

HTH!

答案 2 :(得分:0)

这是肮脏的解决方案。

 .[@*[name() = '@type']][@*='News']/title

我知道您正在使用json,但是我只是检查了html中具有相似属性和值组合的xpath。您可以看到xpath同时考虑了属性名称和值(因为它没有选择名称相同但值不同的其他节点)。

enter image description here