我正在处理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')
答案 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)