2017-01-24 15 views
0

xmlツリーの特定の部分に新しい要素を追加する必要がありますが、機能させることはできません。xmlツリーの特定の部分に新しい要素を追加する

この私のXML入力

<structMap LABEL="Logical Structure" TYPE="LOGICAL"> 
    <div ID="DIVL1" TYPE="CONTENT"> 
    <div ID="DIVL2" TYPE="" DMDID="MODSMD_ARTICLE1" LABEL=""> 
     <div ID="DIVL3"> 
     <div ID="DIVL31" TYPE="TITLE" /> 
     </div> 
    </div> 
    </div> 
</structMap> 

、ここでは私の所望の出力

<structMap LABEL="Logical Structure" TYPE="LOGICAL"> 
    <div ID="DIVL1" TYPE="CONTENT"> 
    <div ID="DIVL2" TYPE="" DMDID="MODSMD_ARTICLE1" LABEL=""> 
     <div ID="DIVL3"> 
     <div ID="DIVL31" TYPE="TITLE"> 
     <fptr> 
      <area BETYPE="IDREF" FILEID="ALTO0011" BEGIN="P11_TB3"/> 
     </fptr> 
     </div> 
     </div> 
    </div> 
    </div> 
</structMap> 

で、ここに私のコード

var b = dc.Descendants().Attributes("TYPE").Where(ee => ee.Value == "TITLE").First(); 

です私はb.AddFistを持っていません。どのように私はそれを動作させることができますか?

答えて

1

が、それは驚くことではありません。 bは、ではなく、XAttributeです。

あなたはb.Parent.AddFirst()を探しているようです。

1

USSEたXML LINQ:あなたはb.AddFirst()を持っていないであろうと、あなたがXMLにLINQを使用していることを、もちろん、と仮定すると、

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 

      XElement title = doc 
       .Descendants("div") 
       .Where(x => (string)x.Attribute("TYPE") == "TITLE") 
       .FirstOrDefault(); 

      title.Add(new XElement("fptr", new object[] { 
       new XElement("area", new object[] { 
        new XAttribute("BETYPE","IDREF"), 
        new XAttribute("FILEID","ALTO0011"), 
        new XAttribute("BEGIN","P11_TB3") 
       }) 
      })); 
     } 
    } 
} 
+0

'title.Add'はnull例外を持つ可能性があります。 'FirstOrDefault'の代わりに' First'を使います。 –

関連する問題