select-xml不会返回任何结果

时间:2010-12-09 10:19:57

标签: powershell

我正在尝试使用powershell命令select-xml从xml文件中选择数据。当我运行以下命令时,不会返回任何结果或错误。我希望将一个版本列表返回到屏幕上。这有什么问题?

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

XML文件(C:\ t \ t.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>

4 个答案:

答案 0 :(得分:3)

另一种方法是:

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

答案 1 :(得分:3)

好的,所以我知道什么是错的。在XML声明的第一个节点之前有一个空格字符。真烦人我尝试了你的第一行:

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

错误:

  

“.. XML声明必须是   文档中的第一个节点,没有   允许使用空格字符   出现在它面前......“

我确信在尝试读取xml文件时,select-xml在问题中会出现同样的错误。 IE中的xml文件很好。

答案 2 :(得分:1)

$ _。node返回没有innerXml属性的System.Xml.XmlElement

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

答案 3 :(得分:1)

这里有几个选项:

$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}