0

我正在尝试创建一个简单地通过目录递归的 Powershell 脚本,提取 XML 文件。然后我们遍历每个 XML,我只想返回某个节点的计数。直截了当的东西。但是我无法让它工作,并且它没有正确加载子节点。

这是我的代码:

foreach ($file in $xmlFiles)
{       
$xml = [xml](Get-Content $file)
$xml.SelectNodes("//RootNode/NextNode")
Write-Host $xml.count    
}

我相信问题不在于代码,而可能在于 XML 文件本身。如果我做一个 $xml.ChildNodes 我得到:

xmlns                        NextNode
_____                        _____
http://urlgoeshere           NextNode

其中,第一项为根节点的属性,具体为schema信息;第二项是从根向下的下一个节点。虽然有更多节点,但不会显示。XML 格式良好,因为它由一个程序生成并由另一个程序使用。但是, ChildNodes 只是没有显示所有节点。

<ScreeningSubmission xmlns="http://schema/">
<submission version="2.0">    
<patient>
  <firstname></firstname>
  <lastname></lastname>
  <gender></gender>
  <date-of-birth></date-of-birth>
  <ethnicity></ethnicity>
  <client_ref></client_ref>
  <address1></address1>
  <address2></address2>
  <address3></address3>
  <postcode> </postcode>
  <telephone></telephone>
  <events>
    <result>
      <date></date>
      <read2></read2>
      <value></value>
      <units></units>
      <term30></term30>
      <term60></term60>
    </result>        
  </events>
</patient>
</submission>
</ScreeningSubmission>

本质上我想计算节点的数量——这个节点通常有 10+ 个。

4

3 回答 3

1

如果没有必要,您可能会忘记 XPath 并使用直接访问:

$xml = [xml](Get-Content $file)
$xml.ScreeningSubmission.submission.patient.ChildNodes.Count
于 2013-07-19T11:15:44.883 回答
0

您应该将 SelectNodes 的结果分配给一个变量。您将获得一个列表,然后您可以使用 count 写入元素的数量。

$nodes = $xml.SelectNodes("//RootNode/NextNode")
Write-Host $nodes.count

您还可以使用以下语句查询节点数

$xml.ScreeningSubmission.ChildNodes.Count
于 2013-07-19T10:33:10.647 回答
0

检查您的架构定义是否正确。当我删除它时,它对我有用。

于 2013-07-19T11:01:02.797 回答