<game>
に新しい子要素を追加するxmlリストがあります。私は、ゲームノードブロックの最後に子要素を追加することができましたが、命名標準のためにイメージ要素の後ろに画像の兄弟として挿入する必要があります。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'の直後に' $ imageElement.ParentNode'の子として '$ marqueeElement'を追加してください。 – har07