2017-01-24 3 views
0

私はこのように持っているとXML要素:それはなった私は、外spanにブラケットを追加したい他の要素を含むXElementの値の中にテキストを追加するには?

string markup = @"<a href='#'> 
         <span> 
         outer content 
         <span>inner content</span> 
         </span> 
        </a>"; 

XElement elelemt = XDocument.Parse(markup).Root; 

<a href='#'> 
    <span> 
     (outer content 
     <span>inner content</span>) 
    </span> 
</a> 

私はそれが内部要素を剥ぎBYT Value properyを変更してみましたテキストのみで置き換えます。

elelemt.Element("span").Value = "(" + elelemt.Element("span").Value + ")"; 

答えて

3

子ノードを既存のnoに置き換える必要がありますあなたのテキストを両側に置いてください。次のようなものがあります。

var span = element.Element("span"); 

span.ReplaceNodes(
    new XText("("), 
    span.Nodes(), 
    new XText(")")); 

空白が指定したものと一致する必要がある場合は、少し厄介です。 XTextノードをどこに挿入するかを調べるには、span.Nodes()を繰り返し実行する必要があります。この渡って来るかもしれませんVB'ersについて

var element = XElement.Parse(markup); 
+0

これは私の外側 'span'タグ内のテキストコンテンツを削除します。' ' (inner content) Saravana

+0

[いいえ、それはしない](https://dotnetfiddle.net/81ZKb2)? –

+0

私の悪い。 'span.Nodes()'の代わりに 'span.Elements()'を間違って追加しました。 – Saravana

1

:あなたの構文解析のように書くことができるよう余談として

は、XElement.Parseが存在します。

Dim markup As XElement 
    markup = <a href='#'> 
       <span> 
       outer content 
       <span>inner content</span> 
       </span> 
      </a> 

    Dim newmarkup As XElement = New XElement(markup) 
    newmarkup.<span>.DescendantNodes.Remove() 
    newmarkup.<span>.Value = "(" 

    For Each el As XNode In markup.<span>.Nodes 
     newmarkup.<span>.Nodes.LastOrDefault.AddAfterSelf(el) 
    Next 

    newmarkup.<span>.Nodes.LastOrDefault.AddAfterSelf(")") 
関連する問題