2017-06-19 53 views
0

我想從我的配置文件中讀取XML節點的文本。爲此,我使用Xpath讀取值。其中一個配置值是在它的內容之間有空格,所以當我閱讀它時,它只是將值返回到空格。 我的配置文件名和內容如下 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> 

我能成功,除了標籤讀取標籤值ReferenceID。 下面是代碼:

$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> 

我在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屬性僅僅是一個字符串,不應該關心空間。