为什么Powershell不将我的文件视为格式良好的XML文档?

时间:2013-07-19 10:12:44

标签: xml powershell

我正在尝试创建一个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

其中第一项是根节点的属性,特别是架构信息;第二个项目是从根目录下来的下一个节点。虽然有更多节点,但不会显示。 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个以上的节点。

3 个答案:

答案 0 :(得分:1)

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

$xml = [xml](Get-Content $file)
$xml.ScreeningSubmission.submission.patient.ChildNodes.Count

答案 1 :(得分:0)

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

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

您还可以使用以下语句

查询节点计数
$xml.ScreeningSubmission.ChildNodes.Count

答案 2 :(得分:0)

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