在不影响子元素的情况下设置根XElement的值
本文关键字:设置 XElement 的值 情况下 影响 元素 | 更新日期: 2023-09-27 18:02:32
更新:我仍然有这个问题,更好的解释。
我有一个XElements列表,我正在对它们进行迭代,以检查它是否与regex模式匹配。如果匹配,我需要在不影响其子元素的情况下替换当前元素的值。
例如,
<root>{REGEX:@Here}<child>Element</child> more content</root
在这种情况下,我需要替换{REGEX:@Here},它在根元素下,但不是子元素!如果使用:
string newValue = xElement.ToString();
if(ReplaceRegex(ref newValue))
xElement.ReplaceAll(newValue);
我正在丢失子元素,标记被转换为<;child>;元素。如果我使用:
xElement.SetValue(newValue);
xElement的值为
"{REGEX:Replaced} Element more content"
从而也丢失了子元素。
如果regex模式在根元素或子元素下,我可以做些什么来替换将保留子元素并工作的值。
PS:为了理解的目的,我将在这里添加regex函数
private bool ReplaceRegex(ref string text)
{
bool match = false;
Regex linkRegex = new Regex(@"'{XPath:.*?'}", System.Text.RegularExpressions.RegexOptions.Multiline);
Match m = linkRegex.Match(text);
while (m.Success)
{
match = true;
string substring = m.Value;
string xpath = substring.Replace("{XPath:", string.Empty).Replace("}", string.Empty);
object temp = this.Container.Data.XPathEvaluate(xpath);
text = text.Replace(substring, Utility.XPathResultToString(temp));
m = m.NextMatch();
}
return match;
}
private void ReplaceRegex(XElement xElement)
{
if(xElement.HasElements)
{
foreach (XElement subElement in xElement.Elements())
this.ReplaceRegex(subElement);
}
foreach(var node in xElement.Nodes().OfType<XText>())
{
string value = node.Value;
if(this.ReplaceRegex(ref value))
node.Value = value;
}
}
编辑:
关于混合内容注释,请编辑代码以处理文本节点。看看它是否有效。