[英]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.