2015-08-03 40 views
2
[xml]$xml = @" 
<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <elementLevel1> 
     <elementLevel2>text node 1</elementLevel2> 
     <elementLevel2>text node 2</elementLevel2> 
     <elementLevel2>text node 3</elementLevel2> 
     <elementLevel2>text node 4</elementLevel2> 
    </elementLevel1> 
    <elementLevel1> 
     <elementLevel2>text node 1</elementLevel2> 
     <elementLevel2>text node 2</elementLevel2> 
     <elementLevel2>text node 3</elementLevel2> 
     <elementLevel2>text node 4</elementLevel2> 
    </elementLevel1> 
</root> 
"@ 

foreach($level1 in $xml.root.elementLevel1) 
{ 
    Write-Host("Type of elementLevel1: " + $level1.GetType()) 
    Write-Host("Type of elementLevel2 in outer loop: " + $level1.elementLevel2.GetType()) 
    foreach($level2 in $level1.elementLevel2) 
    { 
     Write-Host("Type of elementLevel2 in inner loop: " + $level2.GetType()) 
    } 
} 

產量:PowerShell的:嵌套的XML元素是字符串類型,而不是XmlElement的

Type of elementLevel1: System.Xml.XmlElement 
Type of elementLevel2 in outer loop: System.Object[] 
Type of elementLevel2 in inner loop: string 
Type of elementLevel2 in inner loop: string 
Type of elementLevel2 in inner loop: string 
Type of elementLevel2 in inner loop: string 
Type of elementLevel1: System.Xml.XmlElement 
Type of elementLevel2 in outer loop: System.Object[] 
Type of elementLevel2 in inner loop: string 
Type of elementLevel2 in inner loop: string 
Type of elementLevel2 in inner loop: string 
Type of elementLevel2 in inner loop: string 

我的最終目標是改變每個elementLevel2的文本節點,但你不能修改的的InnerXml屬性字符串,並且不能將字符串強制轉換爲[System.Xml.XmlElement]。我如何強制類型系統認爲elementLevel2是一個XmlElement?

回答

3

您coud使用SelectNodesxpath選擇您的節點和遍歷它:

$lvl2Elements = $xml.SelectNodes("//root/elementLevel1/elementLevel2") 

foreach($element in $lvl2Elements) 
{  
    $element.'#text' = 'Test' 
} 
+0

謝謝,這使我擺脫了我的果醬。 – Dzejms

相關問題