2010-12-09 4 views
2

J'essaie d'utiliser la commande powershell select-xml pour sélectionner les données d'un fichier xml. Lorsque j'exécute la commande ci-dessous, aucun résultat ou erreur n'est renvoyé. Je m'attends à ce qu'une liste des éditions soit retournée à l'écran. Quel est le problème avec ça?select-xml ne renvoie aucun résultat

PS C:\> select-xml -path "C:\t.xml" -xpath "//edition" | foreach {$_.node.InnerXML} 
PS C:\> 

Le fichier XML (C: \ t.xml) est:

<?xml version="1.0" encoding="utf-8"?> 
    <Book> 
    <projects> 
     <project name="Book1" date="2009-01-20"> 
     <editions> 
      <edition language="English">En.Book1.com</edition> 
      <edition language="German">Ge.Book1.Com</edition> 
      <edition language="French">Fr.Book1.com</edition> 
      <edition language="Polish">Pl.Book1.com</edition> 
     </editions> 
     </project> 
    </projects> 
    </Book> 
+0

Je le vois travailler PS H: \ > Select-XML -Path C: \ scripts \ t.xml -XPath "// édition" | % {$ _ Node.InnerXML.} En.Book1.com Ge.Book1.Com Fr.Book1.com Pl.Book1.com PS H: \> – ravikanth

Répondre

3

OK, donc je sais ce qui ne va pas. Il y avait un caractère espace blanc avant le premier nœud de la déclaration XML. Vraiment énervant. J'ai essayé votre première ligne:

PS H:\> $xml = ([xml](Get-Content -Path C:\scripts\t.xml)).Book.Projects.Project 

Il errored avec:

» ..Le déclaration XML doit être le premier nœud dans le document, et pas caractères blancs sont autorisés à apparaître avant cela ... "

Je suis sûr que le select-xml devrait échouer dans la question avec cette même erreur en essayant de lire un fichier xml. Le fichier XML est rendu très bien dans IE. .

3

Juste une autre façon de le faire est:

PS H:\> $xml = ([xml](Get-Content -Path C:\scripts\t.xml)).Book.Projects.Project 
PS H:\> $xml.editions | select -ExpandProperty Edition 

language             #text 
--------             ----- 
English              En.Book1.com 
German              Ge.Book1.Com 
French              Fr.Book1.com 
Polish              Pl.Book1.com 
+0

L'exécution de la première ligne m'a donné une erreur que je ensuite utilisé pour résoudre le problème. +1 pour un pas vers la réponse. – Stagg

1

$ _ nœud retourne une System.Xml.XmlElement qui ne possède pas une propriété InnerXml

Select-Xml -Path C:\t.xml -XPath "//edition" | 
    % {$_.node} | get-member | out-gridview 
1

est ici quelques plus d'options:

$xml = [xml]@' 
<?xml version="1.0" encoding="utf-8"?> 
<Book> 
    <projects> 
    <project name="Book1" date="2009-01-20"> 
     <editions> 
     <edition language="English">En.Book1.com</edition> 
     <edition language="German">Ge.Book1.Com</edition> 
     <edition language="French">Fr.Book1.com</edition>    
     <edition language="Polish">Pl.Book1.com</edition>   
     </editions>  
    </project>  
    </projects> 
</Book> 
'@ 

$xml | Select-Xml '//edition/text()' | Foreach {"$_"} 

$xml | Select-Xml '//edition' | Foreach {$_.Node.InnerText} 
Questions connexes