2016-09-28 4 views
0

を親ノードを削除する:私は(LINQからXMLを使用して)、XMLでコレクションの親ノードを取り除くためにしようとしているXMLコレクションから

例えば、入力XML:

<envelop> 
<books> 
    <book> 
     <title>ABC</title> 
     <publishedDate>2012-12-12</publishedDate> 
     <authors> 
      <author>John Smith</author> 
      <author>Bob Doe</author> 
     </authors> 
    <book> 
    <book> 
     <title>XYZ</title> 
     <publishedDate>2013-03-06</publishedDate> 
     <authors> 
      <author>Henry Blah</author> 
      <author>Bob Doe</author> 
     </authors> 
    <book> 
</books> 
</envelop> 

私は結果がなりたい:

<envelop> 

    <book> 
     <title>ABC</title> 
     <publishedDate>2012-12-12</publishedDate> 
     <author>John Smith</author> 
     <author>Bob Doe</author> 
    <book> 
    <book> 
     <title>XYZ</title> 
     <publishedDate>2013-03-06</publishedDate> 
     <author>Henry Blah</author> 
     <author>Bob Doe</author> 
    <book> 
</envelop> 

ノード:<books><authors>がなくなっている - 唯一の子供たちが残っています。

私は、次の質問を見ましたが、XSLT(Remove parent nodes from xml with xslt)で。現時点ではXSLTから離れたいと考えています。本はルート要素であるとし、必要な場合は

+0

のように見えます出力はXMLであると私はあなたができるとは思わない。 – dbasnett

答えて

0
 var document = XDocument.Load(validXmlFilePath); 
     while (document.Descendants("authors").Any()) 
     { 
      var x = document.Descendants("authors").First(); 
      x.AddAfterSelf(x.Nodes()); 
      x.Remove(); 
     } 
     var result = document.Descendants("book"); 
0

VBでコードが

Dim xe As XElement 
    'to load from a file 
    ' xe = XElement.Load("Your Path Here") 

    ' for testing 
    xe = <envelop> 
      <books> 
       <book> 
        <title>ABC</title> 
        <publishedDate>2012-12-12</publishedDate> 
        <authors> 
         <author>John Smith</author> 
         <author>Bob Doe</author> 
        </authors> 
       </book> 
       <book> 
        <title>XYZ</title> 
        <publishedDate>2013-03-06</publishedDate> 
        <authors> 
         <author>Henry Blah</author> 
         <author>Bob Doe</author> 
        </authors> 
       </book> 
      </books> 
     </envelop> 

結果として定義XEと

Dim result As XElement = <envelop></envelop> 

    result.Add(xe...<book>) 

    For Each el As XElement In result...<author>.ToList 
     el.Parent.Parent.Add(New XElement(el)) 
    Next 

    result...<authors>.Remove() 

だろうが

<envelop> 
    <book> 
    <title>ABC</title> 
    <publishedDate>2012-12-12</publishedDate> 
    <author>John Smith</author> 
    <author>Bob Doe</author> 
    </book> 
    <book> 
    <title>XYZ</title> 
    <publishedDate>2013-03-06</publishedDate> 
    <author>Henry Blah</author> 
    <author>Bob Doe</author> 
    </book> 
</envelop> 
関連する問題