2010-07-27 4 views
0

Mon entrée de fichier XML:get attribut du fichier xml

<GlobalView xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> 
    <rels> 
     <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/> 
    </rels> 

wanna attribut de requête Id intérieur de l'élément Relation .... J'utilise la requête donnée ci-dessous et cela fonctionne jusqu'à ce que l'élément Relation et non en me donnant la valeur de l'attribut Id.

for $file in doc("C:/Users/Raffay/Desktop/RnDxr.xml") 
return $file/GlobalView/child::rels/child::Relationship 

Remerciant à l'avance

Répondre

0

Essayez

GlobalView/child::rels/child::Relationship/@Id 

ou sous forme abrégée

GlobalView/rels/Relationship/@Id 
+0

pour $ file dans doc ("C: /Users/Raffay/Desktop/RnDxr.xml") return $ fichier/GlobalView/rels/Relationship/@ Id ce code me donne l'erreur suivante: "Erreur de sérialisation XQuery! Un nœud de document ne peut pas avoir un nœud d'attribut ou un nœud d'espace de noms en tant qu'enfant ".... :(- – user399493

0

Utilisation:

declare default element namespace 
    "http://schemas.openxmlformats.org/package/2006/relationships"; 

let $vIds := 
    for $file in doc("C:/Users/Raffay/Desktop/RnDxr.xml") 
    return $file/GlobalView/rels/Relationship/@Id 

Il y a deux problèmes visibles avec le code original fourni:

  1. Le document XML contenu dans $file a un espace de noms par défaut. Sans déclaration de default element namespace tous les noms non préfixés dans une expression sont considérés comme appartenant à "aucun espace de noms" et aucun nœud ne serait sélectionné.

  2. L'expression vise à sélectionner un élément Relationship, mais l'attribut Id de cet élément est ce qui est vraiment voulu. Déclarer l'espace de nom d'élément par défaut "http://schemas.openxmlformats.org/package/2006/relationships";

+0

déclarer l'espace de noms d'élément par défaut " http://schemas.openxmlformats.org/package/2006/relationships "; pour $ file in doc ("C: /Users/Raffay/Desktop/RnDxr.xml") return $ fichier/GlobalView/rels/Relationship/@ Id ce code me donne l'erreur suivante: "Erreur de sérialisation XQuery! Un nœud de document peut ne pas avoir un nœud d'attribut ou un nœud d'espace de noms en tant qu'enfant ".... :( – user399493

+0

@ user399493: Oui, il était supposé que vous assig n ces attributs à une variable. J'ai édité ma réponse et le code le fait explicitement maintenant. –

+0

Étant donné l'erreur suivante: Erreur d'exécution XQuery! Fin inattendue de l'instruction – user399493