2017-03-02 1 views
0

PowerShellを使用して複数のXMLファイルをオブジェクトにキャストするにはどうすればよいですか?すべてのXMLファイルをXMLオブジェクトとしてキャストするにはどうすればよいですか?

たちは、XMLファイルのディレクトリ

$xmlfiles = Get-ChildItem C:\Directory -Filter *.xml 

foreach ($file in $xmlfiles) { 
    [xml]$file Get-Content $_ 
} 

があると私は続行するかどうかはわからない - 私たちは、それが通過する際に、各ファイルを照会したい場合、我々は、ネストされたforeachが必要なのでしょうか?

私はXMLとしてキャストして、複数のドキュメントにわたって簡単なクエリを作成しています。 すべてのドキュメントに同じスキーマがあり、すべてのドキュメントから一貫したノードと属性のセットを選択したいと考えています。

私はコメント

foreach ($file in $xmlfiles) { 
    Select-Xml $file -Xpath "//node2" 
} 

で提案されているように試してみましたが、私は、実行時例外を取得:

Cannot convert value "sample-document.xml" to type "System.Xml.XmlDocument". Error: 
"The specified node cannot be inserted as the valid child of this node, because the 
specified node is the wrong type." 
At line:1 char:10 
+ foreach ($file in $xmlfiles) { 
+   ~~~~~ 
    + CategoryInfo   : MetadataError: (:) [], ArgumentTransformationMetadataException 
    + FullyQualifiedErrorId : RuntimeException
+0

これらのファイルをクエリするための情報をもう少し提供してください。ファイルの内容を '[xml]'としてキャストする必要はないかもしれません( 'Select-Xml'はあなたのためのより簡単なオプションかもしれません) –

+0

オハイオ州オハイオ州 - 私はそれを知らなかった - 私は質問を更新します。 – Sum1sAdmin

答えて

4

コメントで示唆したように、あなたはファイルに対して直接XPathクエリを実行するためにthe Select-Xml cmdletを使用することができます。

ことはできパイプを直接 Select-XmlGet-ChildItemから FileInfoオブジェクト:

Get-ChildItem C:\Directory -Filter *.xml |Select-Xml -XPath '//node2' 

あなたはSelect-XmlへのファイルのFullName性質を供給し、さらに処理を行うためにForEach-Objectまたはループを使用する必要がある場合:

foreach($xmlFile in Get-ChildItem C:\Directory -Filter *.xml){ 
    $QueryResult = Select-Xml -Path $xmlFile.FullName -XPath '//node2' 
} 
+0

正確に何をしていたのですか - ありがとう@マチアス – Sum1sAdmin

+1

これはかなりクールだ、私はドット表記 '$ QueryResult.node1.node2'でXMLを参照することができ、intellisenseはノード名 – Sum1sAdmin

関連する問題