2016-07-22 2 views
-1

にLINQを使用してタグ名を削除することはできませんxmlファイル私は削除しようとしてタグ名イムは、子ノード</p> <p>を持っていない場合、ここにあるタグ名を削除し、その値を維持することができない理由はなぜ私は、XML

<p> 
<li> 
     <BibUnstructured>Some text</BibUnstructured> 
    </li> 
    <li> 
     <BibUnstructured>another text</BibUnstructured> 
    </li> 
</p> 

、これがあるが、出力

<p> 
<li> 
     Some text 
    </li> 
    <li> 
     another text 
    </li> 
</p> 

ことと、ここで今

のように私のコードである必要があります私はif文を削除する場合は10

それは

+0

BibUnstructuredのみInnerTextプロパティ、すべての子要素を持っていません。 – jdweng

答えて

4

あなたBibUnstructured要素が子要素を持っていないが、インクルード子ノード(この場合はテキストノードを、)持っているタグ名とそのコンテンツを削除します。試してみてください:

foreach (var book in doc.Descendants("BibUnstructured").ToList()) 
{ 
    if (book.Nodes().Any()) 
    { 
     book.ReplaceWith(book.Nodes()); 
    } 
} 

実用的なデモはthis fiddleを参照してください。

1

チャールズなぜそれが動作しないのかについて既に説明しましたが、代わりにこれを行うこともできます。

XElement element = XElement.Load("try.xml"); 

    element.Descendants("li").ToList().ForEach(x=> {    
     var item = x.Element("BibUnstructured"); 

     if(item != null) 
     { 
      x.Add(item.Value);  
      item.Remove(); 
     } 
    }); 

チェックこのDemo

0

あなたが削除しようとしている子ノードの値に親ノードの値を設定する必要があります。次のことを試してみてください :

XElement rootBook = XElement.Load("try.xml"); 
     IEnumerable<XElement> Book = 
      from el in rootBook.Descendants("BibUnstructured").ToList() 
      select el; 
     foreach (XElement el in Book) 
     { 
      if (!el.HasElements) 
      { 
       XElement parent= el.Parent; 
       string value=el.Value; 
       el.Remove(); 
       parent.Value=value; 
       Console.WriteLine(parent); 
      } 

     } 
     Console.WriteLine(rootBook.ToString()); 

されて出力される。

<li>Some text</li> 
<li>another text</li> 
<p> 
<li>Some text</li> 
<li>another text</li> 
</p> 
関連する問題