1

//[dataOptions[id]]似乎工作

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

我试图让所有的父母都dataOptions在 where dataOptions.idequals val。第二个有效吗?我怀疑我用来解析查询的 JPath 有错误。但我不确定我的查询是否有效。

[
{
    "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
}

]

4

3 回答 3

2

//[dataOptions[id]]似乎工作

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

这两者都具有非法语法(谓词必须以节点 - 测试开头)。

我试图让dataOptions 的 所有父母都dataOptions.id平等val

使用

//*[dataOptions[id=val]]

这将选择所有具有子元素且子元素具有相同字符串值的dataOptions元素。idval

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

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

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

于 2012-06-24T03:35:17.520 回答
1

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

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

var jp = new Path(JSONDATA);

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

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

于 2012-06-26T01:32:45.897 回答
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”及其网站有用。

于 2014-01-02T12:50:30.333 回答