2016-12-27 46 views
1

我有这个数据,我希望能够在每个节点只显示名称和IP:使用XPath排除可能的属性?

{ 
    "virtualservers": [ 
     { 
     "name": "/partition/name", 
     "ip": "1.1.1.1", 
     "port": "80", 
     "defaultpool": "", 
     "sslprofile": "None", 
     "compressionprofile": "/Common/cmpprof", 
     "persistence": "None", 
     "irules": [ 
      "/Common/http-to-https" 
     ], 
     "pools": null, 
     "sourcexlatetype": "None", 
     "sourcexlatepool": "None", 
     "loadbalancer": "MYLB" 
     }, 
     { 
     "name": "/partition/name2", 
     "ip": "2.2.2.2", 
     "port": "80", 
     "defaultpool": "", 
     "sslprofile": "None", 
     "compressionprofile": "/Common/cmpprof", 
     "persistence": "None", 
     "irules": [ 
      "/Common/anotherrule" 
     ], 
     "pools": null, 
     "sourcexlatetype": "None", 
     "sourcexlatepool": "None", 
     "loadbalancer": "MYLB2" 
     } 
    ] 
} 

我周围有点戳,这几乎工程:

//virtualserver[(position() > 0 and position() < 10)]/*[name()="name" or name()="ip"] 

[ 
    "/partition/name", 
    "1.1.1.1", 
    "/partition/name2", 
    "2.2.2.2" 
] 

但我想为了让我的节点信息能够在我的模板中正确地遍历它。理想情况下,结果会是这样的

[ 
    { 
    "name": "/partition/name", 
    "ip": "1.1.1.1", 
    }, 
    { 
    "name": "/partition/name2", 
    "ip": "2.2.2.2", 
    } 
] 

我使用这个defiantjs所以它可能不是使用XPath完全兼容。欢迎任何建议!

/Patrik

回答

0

这是不可能使用XPath的。我had experimented了一下过去,看看defiantjs是如何工作的,基本上,在virtualservers阵列中的每个项目得到转化为单个XML元素,大致如下所示:

<d:item xmlns:d="defiant-namespace" d:mi="34"> 
    <name d:constr="String" d:mi="21">/partition/name</name> 
    <ip d:constr="String" d:mi="22">1.1.1.1</ip> 
    <port d:constr="String" d:mi="23">80</port> 
    <defaultpool d:constr="String" d:mi="24"></defaultpool> 
    <sslprofile d:constr="String" d:mi="25">None</sslprofile> 
    <compressionprofile d:constr="String" d:mi="26">/Common/cmpprof</compressionprofile> 
    ..... 
</d:item> 
在XPath数据模型

现在,一个元素被认为一个单元,从开始标记开始一直到相应的结束标记。在这里,你想返回只包含nameip如下所示的元素item元素,但是,有源XML没有这样的元素它的XPath可以返回:

<d:item xmlns:d="defiant-namespace" d:mi="34"> 
    <name d:constr="String" d:mi="21">/partition/name</name> 
    <ip d:constr="String" d:mi="22">1.1.1.1</ip> 
</d:item> 
+0

Thak你,非常感谢! – PatrikJ