我有这样的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 + ")";
答案 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(")")