select-xml 不返回任何结果

发布于 2024-10-06 23:29:58 字数 816 浏览 0 评论 0原文

我正在尝试使用 powershell 命令 select-xml 从 xml 文件中选择数据。当我运行下面的命令时,没有返回结果或错误。我希望屏幕上返回版本列表。这有什么问题吗?

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

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

I'm trying to use the powershell command select-xml to select data from an xml file. When I run the command below no results or errors are returned. I expect a list of the editions to be returned to the screen. What's wrong with this?

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

The XML file (C:\t.xml) is:

 <?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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

失而复得 2024-10-13 23:29:58

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

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

它出错了:

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

我确信在尝试读取 xml 文件时,select-xml 在问题中应该会失败,并出现同样的错误。xml 文件在 IE 中呈现良好。

OK, so I know what's wrong. There was one white space character before the first node of the XML declaration. Really annoying. I tried your first line:

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

It errored with:

"..The XML declaration must be the
first node in the document, and no
white space characters are allowed to
appear before it..."

I'm sure that the select-xml should fail in the question with this same error when attempting to read an xml file. The xml file rendered fine in IE.

放飞的风筝 2024-10-13 23:29:58

另一种方法是:

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

Just another way to do this is:

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
不念旧人 2024-10-13 23:29:58

$_.node 返回一个不具有innerXml 属性的System.Xml.XmlElement

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

$_.node returns a System.Xml.XmlElement which does not have an innerXml property

Select-Xml -Path C:\t.xml -XPath "//edition" | 
    % {$_.node} | get-member | out-gridview
私野 2024-10-13 23:29:58

这里还有几个选项:

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

Here's a couple more 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}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文