簡體   English   中英

Powershell將項目添加到xml數組屬性

[英]Powershell add an item to an xml array property

我在將值添加到xml數組屬性時遇到問題。 xml看起來像這樣:

$xml = [xml]@"
<letters>
    <letter><to>mail a</to></letter>
    <letter>
        <to>mail a</to>
        <to>mail b</to>
    </letter>
</letters>
"@

$letter = $xml.letters.letter[1]
$letter.to
#mail a
#mail b

現在我想將項目(“郵件c”,“郵件d”)添加到“至”數組:

$letter.to
#mail a
#mail b
#mail c
#mail d

但我似乎無法。

a)僅嘗試對屬性設置任何內容都會導致誤導性錯誤:

$letter.to += "a"
#"to" kann nicht festgelegt werden, da nur Zeichenfolgen als Werte zum Festlegen von XmlNode-Eigenschaften verwendet werden können.
#Bei Zeile:1 Zeichen:9
#+ $letter. <<<< to += "a"
#    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
#    + FullyQualifiedErrorId : PropertyAssignmentException

但這可能歸結為“沒有”二傳手:

$letter | Get-Member
#Name       MemberType      Definition
#[bunch of stuff]
#to         Property        System.Object[] {get;}

b)通過SetAttribute設置值部分起作用,但是會導致無法使用(並且非常奇怪)的行為:

$letter.SetAttribute("to", "mail c")
$letter.to
#mail c     <- why is it up front?
#mail a
#mail b

$letter.SetAttribute("to", "mail d")
$letter.to
#mail d     <- why is mail c gone?
#mail a
#mail b 

有誰知道下一步該怎么做?

基本上,您想創建一個新的XmlElement ,設置InnerText值,並將其附加到父<letter>元素:

$to = $xml.CreateElement("to")
$to.InnerText = "mail c"
$letter.AppendChild($to)
$letter.to

輸出:

mail a
mail b
mail c

XmlNode.AppendChild()的MSDN文檔中可以找到類似的示例。

這將達到目的,您可以創建一個片段並為to標記添加innerxml(因為它是非結構化的):

$letter = $xml.letters.letter[1]
$to= $xml.CreateDocumentFragment();
# Create the to node
$to.InnerXml = "<to>mail c</to>"
$letter.AppendChild($to);
# show the node
$letter

另外,您可以使用以下內容在文檔上創建to標記:

$to = $xml.CreateElement("to")

然后設置它的屬性(內部文本):

$to.InnerText = "mail c"

並附加項目

$letter.AppendChild($to)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM