2017-06-19 16 views
0

私の設定ファイルからXMLノードのテキストを読みたいと思います。このため私はXpathを使って値を読みました。設定値の1つは、そのコンセプトの間にスペースがあるため、私がそれを読んでいるときに、値を空白に戻すだけです。 私のconfigファイル名と内容は私が成功したタグReferenceID以外のタグ値を読み取ることができています config.xmlのpowershellを使用してXMLノードのテキストをスペースで読み取る方法

<?xml version="1.0" encoding="UTF-8"?> 
<OpsConfig> 
    <Tenant>mytenant_az1</Tenant> 
    <Client>XYZ</Client> 
    <ReviewID>a123456</ReviewID> 
    <ReferenceID>ARTL_Is Correction_Rewind_Report</ReferenceID> 
<OpsConfig> 

次のように。

$configFile = "config.xml" 
[xml]$confXml = Get-Content $configFile 
$refIds = $confXml | Select-XML -XPath "//OpsConfig/ReferenceID" 
Write-Host $refIds 

変数$ refIdsがちょうど "ARTL_Is" を返します: は、以下のコードです。スペースの後でコンテンツをスキップしています。私はスペースのヘキサ値を追加してみましたが、それでも "ARTL_Is Correction_Rewind_Report"という値全体を返していませんでした。

+4

あなたのxmlは終了タグにエラーがあります。 '/'がありません。これはあなたの問題に関連している可能性があるため、編集していません。私にとっては、完全な文字列 "ARTL_Is Correction_Rewind_Report"を取得しています。 PowerShellのどのバージョンを使用していますか? – gms0ulman

+1

@ gms0ulman:Thx。投稿で私は終了タグを逃した。元のxmlファイルにはそこに存在していました。ちょうどpsのコード全体を再訪し、区切り関数がその区切り文字としてスペースで値を分割するのに使われていることが判明しました。 –

答えて

0

あなたが直面している問題は、欠落していると思われる閉鎖タグのためです。私はそれが誤植であるかどうかはわかりません。しかし、そこに保管してXML解析としてコンテンツを読み込もうとすると、そのコンテンツを取得できます。

あなたはこれを試みることができる:

<OpsConfig> 
    <Tenant>mytenant_az1</Tenant> 
    <Client>XYZ</Client> 
    <ReviewID>a123456</ReviewID> 
    <ReferenceID>ARTL_Is Correction_Rewind_Report</ReferenceID> 
</OpsConfig> 

私はちょうどFYI PS版4にしています。 PS版もご確認ください

0

既にGet-Contentを使用しているので、変数を呼び出してノードを取得できます。

[Xml]$ConfXml = Get-Content ".\config.xml" 
$RefIds = $ConfXml.OpsConfig.ReferenceID 
Write "$RefIds" 

あなたの懸念は、複数のリファレンスIDがある場合は、この方法ではForEach

ForEach ($i in $ConfXml.OpsConfig.ReferenceID) { Do stuff with $i } 

また、

ForEach ($i in $ConfXml.OpsConfig) { Do stuff with $i.ReferenceID } 

でそれらを解析することができ、変数内のXML属性だけですスペースは気にしないでください。