2017-05-12 26 views
1

したがって、1つの要素しか持たないXMLファイルを使用すると、次元1の配列のようにアクセスできなくなるPowerShellはSystem.Arrayの代わりにSystem.Xml.XmlLinkedNodeと読み込んでいます。PowerShellで要素が1つのみのXMLファイルを読み取るときにSystem.Arrayを強制する

どのように強制的に1項目の配列として読み取ることができますか?このXMLファイルの読み込み

<batch> 
    <project name="test"> 
    <locPrj>locPrj</locPrj> 
    <locFolder>locFolder</locFolder> 
    <plan name="Plan 01" exec="1" /> 
    </project> 
</batch> 

は私のようにそれを呼び出すことはできません:

[xml]$mainXML = Get-Content -Path "C:\test.xml" 
$mainXML.batch.project[0] # This returns nothing! 
$mainXML.batch.project.GetType() 

IsPublic IsSerial Name          BaseType                       
-------- -------- ----          --------                       
True  False XmlElement        System.Xml.XmlLinkedNode  

しかし、このXMLを、それは私のことができます:

<batch> 
    <project name="test"> 
    <locPrj>locPrj</locPrj> 
    <locFolder>locFolder</locFolder> 
    <plan name="Plan 01" exec="1" /> 
    </project> 
    <project name="test2"> 
    <locPrj>locPrj2</locPrj> 
    <locFolder>locFolder2</locFolder> 
    <plan name="Plan 01" exec="0" /> 
    </project> 
</batch> 

私がされていますそのノードの配列を強制するコマンドを探していますが、誰も見つけられませんでした。何か案が?

[xml]$mainXML = Get-Content -Path "C:\test2.xml" 
$mainXML.batch.project[0] # This the first project called test 
$mainXML.batch.project.GetType() 
IsPublic IsSerial Name          BaseType                       
-------- -------- ----          --------                       
True  True  Object[]         System.Array 

答えて

1

だけ@()を使用して配列ノードをキャスト:

@($mainXML.batch.project)[0] 
+0

を事は私がループの各「プロジェクト」に行くとその要素を変形していることです。 $ mainXML.batch.project [$ nInt]にダミー変数$ nIntを持つように、このソリューションでは配列に導入するだけですが、いくつかのプロジェクトがあるときは、配列の内部に配列があります。 – Ricardo

関連する問題