2011-02-11 8 views
1

Quand jeComment afficher des valeurs spécifiques avec XPathQuery?

account[@id=15] 

Je reçois

<?xml version="1.0" encoding="utf-8"?> 
<root> 
    <account id="15" first_name="Sandra" last_name="Schlichting"> 
    <private_address address_id="19" /> 
    <profile_employee fk_id="15"> 
     <date_created>2011-1-2T1:1:00</date_created> 
     <address building="3" room="2" floor="1" /> 
    </profile_employee> 
    <profile_student fk_id="15"> 
     <address address_id="19" /> 
    </profile_student> 
    <profile_student fk_id="15"> 
     <address address_id="45" /> 
    </profile_student> 
    </account> 
</root> 

mais je voudrais juste sortir les valeurs de

  • prenom
  • last_name
  • construction
  • chambre

Quelqu'un peut-il comprendre comment faire cela?

Mise à jour:

Ces commandes fonctionne

account[@id=15]/profile_employee 
account[@id=15]/profile_employee/address 

mais sorties des éléments entiers, et non seulement la salle des attributs et du bâtiment.

+0

Bonne question, +1. Voir ma réponse pour une solution d'expression XPath à une seule couche. :) –

Répondre

1

Alors que @ la réponse de Flack est correcte, le résultat recherché peut être produit avec une seule expression XPath:

concat('&#xA;', /*/account[@id=15]/@first_name, 
     ' ', /*/account[@id=15]/@last_name, 
     ' : ', /*/account[@id=15]/profile_employee/address/@building, 
     '/', /*/account[@id=15]/profile_employee/address/@room 
     ) 

Lorsque cette expression XPath est évaluée sur le document XML fourni:

<root> 
    <account id="15" first_name="Sandra" last_name="Schlichting"> 
     <private_address address_id="19" /> 
     <profile_employee fk_id="15"> 
      <date_created>2011-1-2T1:1:00</date_created> 
      <address building="3" room="2" floor="1" /> 
     </profile_employee> 
     <profile_student fk_id="15"> 
      <address address_id="19" /> 
     </profile_student> 
     <profile_student fk_id="15"> 
      <address address_id="45" /> 
     </profile_student> 
    </account> 
</root> 

le résultat recherché, est produit correct:

Sandra Schlichting : 3/2 
1

Vous devez:

/root/account[@id=15]/@first_name 
/root/account[@id=15]/@last_name 
/root/account[@id=15]/profile_employee/address/@building 
/root/account[@id=15]/profile_employee/address/@room 

Si testé XSLT contre votre échantillon, le résultat sera (linebreaks pour plus de clarté):

Sandra 
Schlichting 
3 
2 
+0

Quand j'essaye d'obtenir XPath: impossible de trouver/root dans le schéma. Si je supprime '/ root', j'obtiens' XPath: seul l'accès direct aux objets peut sélectionner un attribut. Changez le XPath pour sélectionner un élément, ou utilisez l'accès direct aux objets'. –

+0

@Sandra. Qu'est-ce que vous utilisez comme langage d'hébergement pour XPath? – Flack

+0

Perl sur Linux. Le serveur est une sorte de serveur Microsoft. –

Questions connexes