在XPath中,当我想验证父节点与条件中存在时,如何实现?

how to implement when in xpath where i want to validate a parent node is same as present in condition?

提问人:Swagata Mondal 提问时间:9/13/2023 最后编辑:Swagata Mondal 更新时间:9/13/2023 访问量:47

问:

       "name" : "a",
       "type": "container",
       "kids": [{
         "name": "a1",
         "type": "container",
         "kids": [{
           "name": "a2",
           "type": "leaf",
           "when": "../a"
         }]
       }]
     }

在 When 条件中,我想在节点 ->parent ->parent 中验证 is “a” 现在如何验证该条件

json go xpath-1.0

评论

0赞 Siebe Jongebloed 9/13/2023
您正在显示 json。XPath 是针对 xml 的吗?
0赞 kostix 9/13/2023
您是否知道 XPath 是用于 XML 的(正如 Siebe 所指出的),而您的示例不是 XML。我可以猜到这只是你的懒惰——你展示了一些对源 XML 而不是原始文档的解析解释——但以防万一,值得指出你不能用 XPath 处理 JSON 文档。
0赞 kostix 9/13/2023
如果确实需要处理 JSON,可以查看 github.com/json-path/JsonPath。另请注意,如果这是您需要实施的唯一检查,则无需依赖复杂的处理;相反,您可以将 JSON 解析为自定义树状数据结构,这将使您想要实现的检查变得轻而易举。
0赞 Swagata Mondal 9/13/2023
我的代码在JSON路径中,我正在尝试创建一个验证器,何时检查..意味着父节点存在“A”,则叶节点 A2 将存在......
0赞 Swagata Mondal 9/13/2023
@SiebeJongebloed json 的 .xpath

答:

0赞 Siebe Jongebloed 9/13/2023 #1

如果您的内容是 XML,并且您想要检查上下文的父级是否为 ,则可以使用以下命令:a

parent::*/parent::a

评论

0赞 Swagata Mondal 9/13/2023
我的内容是 JSON 的,你能帮我解决吗
0赞 Michael Kay 9/13/2023 #2

若要使用 XPath 处理 JSON,需要 XPath 3.1 处理器。

与 XML 的树模型不同,JSON 的树模型没有父指针,这意味着您无法从节点导航到其父节点。这基本上意味着你必须在下降树时收集你需要的信息,并以参数的形式传递它。

充实这一点需要更多的上下文来准确理解您要做什么。

0赞 Martin Honnen 9/13/2023 #3

XPath 3.1可以将JSON查询为XDM映射/数组,查找运算符对于您的示例(有点格式)?

{
  "name" : "a",
  "type": "container",
  "kids": [
    {
     "name": "a1",
     "type": "container",
     "kids": [
       {
         "name": "a2",
         "type": "leaf",
         "when": "../a"
       }
    ]
    }
  ]
}

您可以测试例如

?name = 'a' and ?kids?*?kids?*?when = '../a'

并会给真。但是,我不确定您是否希望使用节点 XPath 步骤语法,这不是 XPath 3.1 提供的;您可能会在其他一些内部将 JSON 转换为某些 XML 的实现中找到它。/

在线 XPath 3.1 小提琴