2017-01-24 30 views
0

我有像這樣的XML元素:如何在包含其他元素的XElement值中添加文本?

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

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

欲括號添加到外span所以它變成:

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

我試圖修改Value屬性格式BYT它除掉內部元件並用文本替換它:

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

回答

3

您將需要替換子節點與現有no des與你的文本在任何一方。大概是這樣的:

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

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

如果空格必須符合您指定的內容,它會變得有點棘手。你必須遍歷span.Nodes()來確定在哪裏插入你的XText節點。

順便說一句,存在XElement.Parse,讓您的分析可以寫成:

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

這將刪除這些文字內容外我'span'標籤中:'' (inner content) Saravana

+0

[不,它不需要(https://dotnetfiddle.net/81ZKb2)? –

+0

我的不好。錯誤地添加了'span.Elements()'而不是'span.Nodes()'。 – Saravana

1

對於可能會遇到這個VB'ers。

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(")") 
相關問題