获取XML

时间:2015-09-28 01:18:13

标签: c# xml powershell

我正在尝试遍历XML文档中的每个节点。我似乎无法弄清楚如何做到这一点。我在PowerShell中这样做,但可以从C#翻译。

foreach ($file in Get-ChildItem ($directoryUrl+"\*.*") -include *.xml)
{
    [xml]$xmlFile = Get-Content $file; #get content from xml file
    Write-Host "Fff";

    $firstNode = $xmlFile.DocumentElement;

    $children = $firstNode.ChildNodes;

现在这会得到第一个节点的子节点,这个节点很好,但是它正在作为一个孩子接收Random,但我也希望它能够获取Random XML标签内的内容。就像在细节标签中一样。

如何在PowerShell中轻松获得此功能?

我正在阅读的XML是:

<UserBase> 
  <User> 
    <Name>Kalle</Name> 
  </User> 
  <User> 
    <Name>Becker</Name> 
  </User>
  <User> 
    <Name>Daniel</Name> 
  </User> 
  <User> 
    <Name>Anderson</Name> 
  </User>
  <Random>
    <Details>myself</Details>
    <Details>mysdelf</Details>
  </Random>
</UserBase>

1 个答案:

答案 0 :(得分:0)

不确定我是否真的理解您的问题,但是要从XML文档获取所有节点,您可以调用XPath来解决问题:

$xml = [xml] @"
    <UserBase> 
      <User> 
        <Name>Kalle</Name> 
      </User> 
      <User> 
        <Name>Becker</Name> 
      </User>
      <User> 
        <Name>Daniel</Name> 
      </User> 
      <User> 
        <Name>Anderson</Name> 
      </User>
      <Random>
        <Details>myself</Details>
        <Details>mysdelf</Details>
      </Random>
    </UserBase>
"@

select-xml $xml -xpath "/descendant-or-self::node()" | 
   where { !$_.Node.Name.Contains("#") }