2017-05-30 61 views
1

<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 

感謝。

+0

'$ imageElement.ParentNode.InsertAfter($ marqueeElement、$ imageElement)'はどうですか? – har07

+0

こんにちはHar07、ありがとうございます。問題は画像の子として追加されることです。申し訳ありませんが私は私のポストでうまく説明しなかった場合。私はそれを編集しました。 を兄弟にしてとし、その直後に挿入します。 –

+0

それは私が何かを見逃していないなら、その行がするはずのことです: '$ imageElement'の直後に' $ imageElement.ParentNode'の子として '$ marqueeElement'を追加してください。 – har07

答えて

0

私はMSDNのドキュメントを読んで、解決策を見つけ出しました。 https://msdn.microsoft.com/en-us/library/k44daxya.aspx

すべてのゲームノードブロックはレイアウトが同じで、実際には参照番号を配列番号で呼び出すことができます。

#Add marquee node to game node parent 
$marqueeElement = $xml.CreateElement("marquee") 
$marqueeElement.InnerText = $marqueelPath 
$game.InsertAfter($marqueeElement, $game.ChildNodes[3]) 
関連する問題