2017-08-31 5 views
0

Supposons que ce mon XML exemple avec des espaces de nomsLooping dans Expression XPath ayant Namespace

<data> 
    <vnfr:vnfr-catalog xmlns:vnfr="urn:ietf:params:xml:ns:yang:nfvo:vnfr"> 
     <vnfr:vnfr> 
      <vnfr:id>1234</vnfr:id> 
       <vnfr:vdur> 
        <vnfr:id>987</vnfr:id> 
        <vnfr:id>987</vnfr:id> 
        <vnfr:management-ip>10.100.100.10</vnfr:management-ip> 
       </vnfr:vdur> 
       <vnfr:vdur> 
        <vnfr:id>567</vnfr:id> 
        <vnfr:id>567</vnfr:id> 
        <vnfr:management-ip>10.100.100.11</vnfr:management-ip> 
       </vnfr:vdur> 
     </vnfr:vnfr> 
    </vnfr:vnfr-catalog> 
</data> 

J'ai un échantillon expression XPath que j'utilise Java

expression="/data/*[local-name() = 'vnfr-catalog']/*[local-name() = 'vnfr']/*[local-name() = 'id']/*[local-name() = 'vdur']/*[local-name() = 'management-ip']/text()"; 

Sortie: 10.100.100.10

Mais comment Iterate et récupérer la 2ème gestion-ip ie 10.100.100.11

J'ai essayé l'être faible expression avec vdur [2], mais cela n'a pas fonctionné. Comment extraire la 2e adresse IP de gestion en utilisant l'expression ??????

Répondre

0

Votre requête a deux erreurs:

  1. Vous ne devriez pas entrer dans l'élément id car il ne contient pas management-ip, ils sont au même niveau de la hiérarchie
  2. *[local-name() = 'vdur[2]'] doit être remplacé par *[local-name() = 'vdur'][2]

Voici ma requête qui semble fonctionner:

/data/vnfr:vnfr-catalog/vnfr:vnfr/vnfr:vdur[2]/vnfr:management-ip/text() 

Ceci est testé sur

<data xmlns:vnfr="asdasdas"> 
    <vnfr:vnfr-catalog> 
     <vnfr:vnfr> 
      <vnfr:id>1234</vnfr:id> 
       <vnfr:vdur> 
        <vnfr:id>987</vnfr:id> 
        <vnfr:id>987</vnfr:id> 
        <vnfr:management-ip>10.100.100.10</vnfr:management-ip> 
       </vnfr:vdur> 
       <vnfr:vdur> 
        <vnfr:id>567</vnfr:id> 
        <vnfr:id>567</vnfr:id> 
        <vnfr:management-ip>10.100.100.11</vnfr:management-ip> 
       </vnfr:vdur> 
     </vnfr:vnfr> 
    </vnfr:vnfr-catalog> 
</data> 

Au-dessus est votre exemple, mais un peu modifié puisque vous n'êtes pas déclarer l'espace.

Sortie:

Text='10.100.100.11' 

testé dans https://www.freeformatter.com/xpath-tester.html

Votre requête correcte ressemblerait à ceci:

/data/*[local-name() = 'vnfr-catalog']/*[local-name() = 'vnfr']/*[local-name() = 'vdur'][2]/*[local-name() = 'management-ip']/text() 
+0

Oui, mais je veux cela doit être fait avec les espaces de noms xPath ignorés. Ça ne marche pas !!! – Tushar

+0

@Tushar voir la dernière ligne de ma réponse. Vérifiez également vos erreurs du haut de ma réponse –

+0

Ok Got it ...... Mais un doute sur la façon de trouver la longueur de l'attribut "vdur" disponible dans le XML donné par Java ????? – Tushar

0

Comme Alexey résoudre votre problème un. ci-dessous est la réponse à obtenir la longueur d'un attribut

While xxx is the tag prefix, use just count(//Formulas/yyy) 

nombre Utilisez mot-clé

Source

count of element in XPath

espère que cela vous aidera :)