2013-02-25 59 views
1

我試圖在PowerShell中創建一些多級xml。我開始與代碼我無法讓我的頭圍繞如何創建第二個次級添加多級xml powershell

adding XML sub-elements

。下面是我想要創建的xml示例。

由於提前,

Goldstien

<?xml version="1.0" ?> 
<!DOCTYPE svcengine SYSTEM "service.dtd"> 

<Services> 

<Service> 
<Name>My service</Name> 
<Label>Availability</Label> 
<Source> 
    <Composition/> 
    <ServiceRef>My service ref</ServiceRef> 
</Source> 
</Service> 

</Services> 
+0

我不知道你是什麼意思通過「創造第二個低等級」。你想修改結構嗎?爲此你必須改變DTD。或者你只是想將一個子節點追加到某個節點?這可以這樣做(一般):選擇一個節點,創建一個新元素,將新元素添加到選定節點。 – 2013-02-25 18:34:57

+0

所以在服務標籤內是源標籤和子標籤。我無法修改上一篇文章中的代碼來生成上面的xml代碼。我熟悉PowerShell,但是對xml編碼來說是新的。 – Goldstien 2013-02-26 08:18:37

回答

1

如果你有這樣的結構:

<Services> 
    <Service> 
    <Name>My service</Name> 
    <Label>Availability</Label> 
    </Service> 
</Services> 

,並想添加一個節點<Source>,使它看起來像這樣:

<Services> 
    <Service> 
    <Name>My service</Name> 
    <Label>Availability</Label> 
    <Source> 
     <Composition/> 
     <ServiceRef>My service ref</ServiceRef> 
    </Source> 
    </Service> 
</Services> 

你可以去了解它是這樣的:

# load XML file 
[xml]$doc = Get-Content "C:\service.xml" 

# create node <Composition> 
$comp = $doc.CreateNode('element', 'Composition', '') 

# create node <ServiceRef> 
$sref = $doc.CreateNode('element', 'ServiceRef', '') 
$desc = $doc.CreateTextNode('My service ref') 
$sref.AppendChild($desc) 

# create node <Source> and append child nodes <Composition> and <ServiceRef> 
$src = $doc.CreateNode('element', 'Source', '') 
$src.AppendChild($comp) 
$src.AppendChild($sref) 

# append node <Source> to node <Service> 
$svc = $doc.SelectSingleNode('//Service') 
$svc.AppendChild($src) 

# save XML file 
$doc.Save("C:\service.xml") 

編輯:您可以循環在幾個<Service>節點像這樣的東西(簡體):

$doc.SelectNodes('//Service') | % { 
    $comp = $doc.CreateNode('element', 'Composition', '') 
    $sref = $doc.CreateNode('element', 'ServiceRef', '') 

    $src = $doc.CreateNode('element', 'Source', '') 
    $src.AppendChild($comp) 
    $src.AppendChild($sref) 

    $_.AppendChild($src) 
} 
+0

謝謝 - 靠近。所以我手動創建了C:\ service.xml並運行了新的代碼,並且這可以工作。我在一個數組中有幾個服務(即$ services = @(「service1」,「service2」),並想知道如何遍歷它們。 – Goldstien 2013-02-26 11:33:00