这是一个有效的xpath查询?

时间:2012-06-24 03:20:49

标签: javascript json

//[dataOptions[id]]似乎有用

//[dataOptions[id=value]]不起作用

我想让dataOptions的所有父母dataOptions.id等于val。第二个有效吗?我怀疑我用来解决查询的JPath有一个bug。但我不确定我的查询是否有效。

[
{
    "dataOptions": {
        "id": "id1",
        "count": "10"
    },
    "name": "Leon",
    "children": [
        {
            "dataOptions": {
                "id": "id2",
                "count": "10"
            },
            "name": "Leon",
            "children": [],
            "isExpanded": false
        },
        {
            "dataOptions": {
                "id": "id2",
                "count": "10"
            },
            "name": "Leon",
            "children": [],
            "isExpanded": false
        }
    ],
    "isExpanded": false
},
{
    "dataOptions": {
        "id": "id3",
        "count": "10"
    },
    "name": "Leon",
    "children": [],
    "isExpanded": false
},
{
    "dataOptions": {
        "id": "id4",
        "count": "10"
    },
    "name": "Leon",
    "children": [],
    "isExpanded": false
}

3 个答案:

答案 0 :(得分:2)

  

//[dataOptions[id]]似乎有用

     

//[dataOptions[id=value]]不起作用

这些都是非法语法(谓词前面必须有节点 - 测试)。

  

我想让dataOption的所有父母在哪里   dataOptions.id等于val

使用

//*[dataOptions[id=val]]

这将选择具有dataOptionsid个孩子具有相同刺痛价值的子元素val的所有元素。

或使用val不是元素名称而是文字字符串,然后使用

//*[dataOptions[id='val']]

更新:OP在最初询问后3小时编辑了问题 - now 我们看到输入是JSON。 XPath不了解JSON - 它只对XML文档进行操作。因此,不应将此问题标记为XPath。

答案 1 :(得分:1)

我有没有可以查看您尝试使用JPath的JSON数据的地方?

您也可以尝试使用查询数据的链式方法。

var jp = new Path(JSONDATA);

jp.$('dataOptions').$(function(n){
    return( n.$('id').json == yourvalue );
}).json;

JPath的XPath部分只是使用一些正则表达式来创建上面的代码。

答案 2 :(得分:1)

ShaggyInjun, 我认为你正在寻找与以下内容相符的内容:

//dataOptions[id]
//dataOptions[id="id2"]

我最近编写了一个名为“defiant.js”的js-lib - 可以使用XPath对JSON结构进行查询。在此上下文中 - 我已在此页面粘贴您的JSON数据:

http://www.defiantjs.com/#xpath_evaluator

...并在视觉上测试了不同的XPath查询结构。评估者突出显示JSON及其XML对应的匹配。

我希望你找到“defiant.js”及其网站有用。