我正在尝试创建一个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个以上的节点。
答案 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)
检查您的架构定义是否正确。当我删除它时,它对我有用。