如何在包含其他元素的XElement值中添加文本?

时间:2017-01-24 11:19:49

标签: c# xml

我有这样的XML元素:

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属性,除去内部元素,只用文本替换它:

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

2 个答案:

答案 0 :(得分:3)

您需要使用现有节点替换子节点,并在其两侧添加文本。大概是这样的东西:

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

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

如果空白必须与您指定的内容相匹配,那将会有点棘手。您必须遍历span.Nodes()以找出插入XText节点的位置。

另外,存在XElement.Parse,因此您的解析可以写成:

var element = XElement.Parse(markup);

答案 1 :(得分: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(")")