2010-03-25 8 views
2

Sur la documentation iReport j'ai trouvé ces requêtes XPath:Que signifient "+", "@" et "*" dans une requête XPath?

/addressbook/[email protected] 
/addressbook/category/[email protected] 
/addressbook/category/person+LASTNAME 
/addressbook/category/person+FIRSTNAME 
/addressbook/category/person+hobbies*hobby 

Mes questions:

  1. est-[email protected] même que category/@name? Quelle est la signification de person+LASTNAME? (Le + pour être précis)
  2. Quel est le sens de person+hobbies*hobby (Le * pour être précis)

Ils sont appliqués à ce XML:

<addressbook> 
<category name="home"> 
    <person id="1">               
     <LASTNAME>Davolio</LASTNAME> 
     <FIRSTNAME>Nancy</FIRSTNAME> 
     <hobbies> 
     <hobby>Radio Control</hobby> 
     <hobby>R/C Cars</hobby> 
     <hobby>Micro R/C Cars</hobby> 
     <hobby>Die-Cast Models</hobby> 
     </hobbies> 
     <email>[email protected]</email> 
     <email>[email protected]</email> 
    ... 

(XML complet here

Répondre

3

Ce n'est pas XPath. C'est juste XPath. A partir de la page qui vous:

<symbol> est utilisé pour ajouter un chemin supplémentaire sur le chemin de base et de définir ce qui doit être retourné. + Ajouter le chemin suivant au chemin de base (cela se produit lorsque le chemin d'accès de base = chemin d'enregistrement);
@ renvoie la valeur de l'attribut: elle est suivie du nom de l'attribut;
* retourner tous les tags identifiés par le chemin suivant comme JRXMLDatasource

Il est en section 7.3 of the link you have in your question.

Alors, va de cela, ce sont les significations de vos expressions XPath comme:

/addressbook/[email protected] 
    The basepath is /addressbook/category, return the attribute "name" 

/addressbook/category/[email protected] 
    The basepath is /addressbook/category/person, return the attribute "id" 

/addressbook/category/person+LASTNAME 
    The basepath is /addressbook/category/person, return the element "LASTNAME" 

/addressbook/category/person+FIRSTNAME 
    The basepath is /addressbook/category/person, return the element "FIRSTNAME" 

/addressbook/category/person+hobbies*hobby 
    The basepath is /addressbook/category/person, look inside "hobbies" 
    and return all elements named "hobby" 
+0

je trouve aussi ce et je me demandais pourquoi ils réinventer la roue. Toutes ces fonctionnalités sont disponibles dans XPath. –

+0

@divo: D'accord. Cela n'a aucun sens. XPath peut faire tout ce que ces expressions semblent indiquer. – Welbog

+0

Eh bien, c'est un peu plus court; xpath ne fait pas la distinction entre base et parent comme ceci - vous auriez besoin de deux colonnes ie base: '/ addressbook/category/person' sélectionne:' hobbies/hobby' - ce qui n'explique pas pourquoi ils réinventent la roue, mais ce n'est pas remplaçable avec un * single * xpath, de toute façon ... –

Questions connexes