0

ディレクトリを単純に再帰してXMLファイルを引き出すPowershellスクリプトを作成しようとしています。次に、各 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

ここで、最初の項目はルート ノードの属性、具体的にはスキーマ情報です。2 番目の項目は、ルートから 1 つ下のノードです。ただし、表示されないノードが他にもあります。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

スキーマ定義が正しいかどうかを確認してください。私がそれを取り除いたとき、それは私のために働いた。

于 2013-07-19T11:01:02.797 に答える
0

SelectNodes の結果を変数に代入する必要があります。リストを取得するので、count を使用して要素の数を書き込むことができます。

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

次のステートメントを使用してノード数を照会することもできます

$xml.ScreeningSubmission.ChildNodes.Count
于 2013-07-19T10:33:10.647 に答える