2016-12-27 4 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, считается один элемент блок, начиная с открытого тега до соответствующего закрывающего тега. Здесь вы хотите вернуть item элемент, содержащий только name и ip элементы, как показано ниже, но, нет такого элемента в исходном 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

Тхака вы, высоко ценится! – PatrikJ

Смежные вопросы