2016-12-27 88 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