【问题标题】:How to read an element in XML file in PowerShell?如何在 PowerShell 中读取 XML 文件中的元素?
【发布时间】:2019-08-01 12:12:10
【问题描述】:

我有一个如下所示的 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<INITIAL>
    <FB1>a</FB1>
    <FB2>b</FB2>
    <FB3>c</FB3>
    <FB4>d</FB4>
    <FB5>e</FB5>
    <FB6>f</FB6>
    <FB7>g</FB7>
    <FB8>h</FB8>
    <FB9>i</FB9>

</INITIAL>

我只想将元素 a 读取到 i 并将其转换为字符串,如下所示:

abcdefghi

【问题讨论】:

    标签: xml powershell


    【解决方案1】:

    假设这个 XML:

    <INITIAL>
        <FB1>fr</FB1>
        <FB2>fs</FB2>
        <FB3>...</FB3>
    </INITIAL>
    

    获取容器元素的InnerText 就足够了:

    Write-Host $xml.DocumentElement.InnerText
    

    这将打印frfs...

    如果在您的实际 XML 中容器不是最顶层的元素,请将 DocumentElement 替换为 .SelectSingleNode('some/xpath')

    【讨论】:

      【解决方案2】:

      您首先从中创建一个 System.Xml.XmlDocument。这是一个例子:

      $theXml = [xml](gc $xmlPath)
      $theXml.GetType().fullname
      

      一旦拥有它,您就可以随心所欲地玩耍! - 在您的示例中,您需要连接子元素的值。您会在网上找到很多如何连接数组中的字符串值的示例 - example

      $theXml.INITIAL.GetEnumerator() # this gives you enumeration of values in children to the 'INITIAL' element. 
      

      我希望这会有所帮助。

      编辑:是的,您的 xml 已损坏 - 我假设它为所有人添加了结束标签,例如 &lt;/FB1&gt;

      【讨论】:

      • 我试过这个:$XML = [xml](gc "C:\Users\XML.xml") $XML.GetType().FullName 它错误:无法转换值 System.Object[]键入 System.Xml.XmlDocument。该文档已经有一个 DocumentElement 节点
      【解决方案3】:

      您可以使用 XPath 表达式获取所需的节点,然后使用 -join 运算符将字符串连接在一起。

      XPath 表达式/INITIAL/* 表示直接位于顶层INITIAL 元素内的每个元素。如果后来有人决定以某种方式扩展数据格式,请注意选择您真正需要的数据。

      PS> $Data = New-Object Xml
      PS> $Data.Load((Resolve-Path file.xml))
      
      PS> $Data.SelectNodes("/INITIAL/*")."#text" -join ""
      frfsftfufvfwfhgKfg
      

      在 Windows 10 上使用 Windows PowerShell 5.1 进行测试。

      【讨论】:

      • 使用 SelectNodes 是错误的:使用“1”参数调用“SelectNodes”的异常:“表达式必须计算为节点集。”
      • @Job - 我的答案中的 XPath 查询创建了一个节点集。您使用的实际查询是什么?
      猜你喜欢
      • 1970-01-01
      • 2013-03-22
      • 2019-12-28
      • 1970-01-01
      • 2010-11-19
      • 2017-10-11
      • 2011-08-22
      相关资源
      最近更新 更多