1
我有一个xml列表,我希望在<game>
下添加一个新的子元素。我已经能够将子元素附加到游戏节点块的末尾,但对于命名标准,我需要将它插入图像元素之后作为图像的同胞。Powershell:在特定的当前兄弟元素之后添加新的XML元素
<image>
<marquee>
XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<gameList>
<game id="2758" source="theGamesDB.net">
<path>./Zelda II - The Adventure of Link (USA).zip</path>
<name>Zelda II - The Adventure of Link (USA)</name>
<desc>Removed description for example</desc>
<image>./boxart/Zelda II - The Adventure of Link (USA).png</image>
<rating>0.68333</rating>
<releasedate>19880926T000000</releasedate>
<developer>Nintendo</developer>
<publisher>Nintendo</publisher>
<genre>Action</genre>
<players>1</players>
</game>
</gamelist>
我的代码,在代码块的末尾添加选取框子元素。 注意:这是一个循环遍历大量游戏列表的循环。为了简单起见,我已经取出来创建选取框路径位置的代码和硬编码了。
#Set the name of the game list
$InputXML = "gamelist.xml"
$OutputXML = "MODgamelist.xml"
#Load the existing document
[xml]$xml = Get-Content $InputXML
foreach($game in $xml.gamelist.game)
{
#Set Marquee Path
$marqueelPath = "./Zelda II - The Adventure of Link (USA).png"
#Add marquee node to game node parent
$marqueeElement = $xml.CreateElement("marquee")
$marqueeElement.InnerText = $marqueelPath
$game.AppendChild($marqueeElement)
}
#Output
$xml.save($OutputXML)
一些挖我想出了这个代码中插入图像后,新的子元素后却出现了错误。如何正确选择图像节点,然后插入它?
$imageElement = $game.SelectSingleNode('//image')
$game.InsertAfter($marqueeElement, $imageElement)
错误:
Exception calling "InsertAfter" with "2" argument(s): "The reference node is not a child of this node."
At line:1 char:1
+ $game.InsertAfter($marqueeElement, $imageElement)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
在此先感谢。
'$ imageElement.ParentNode.InsertAfter($ marqueeElement,$ imageElement)'? – har07
嗨Har07,谢谢你的建议。问题是它将它添加为图像的孩子。对不起,如果我没有在我的帖子中解释得很好。我编辑过它。我想
这就是该行应该做的事情,如果我没有错过任何东西:在'$ imageElement'之后添加'$ marqueeElement'作为'$ imageElement.ParentNode'的子元素。 – har07