我正在尝试使用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>
答案 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)
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}