有没有办法用其他XElement选择性地替换XElement内容?
我有这个XML:
<prompt>
There is something I want to tell you.[pause=3]
You are my favorite caller today.[pause=1]
Have a great day!
</prompt>
我想这样渲染:
<prompt>
There is something I want to tell you.<break time="3s"/>
You are my favorite caller today.<break time="1s"/>
Have a great day!
</prompt>
我需要用实际的XElement替换占位符,但是当我尝试更改XElement的内容时,.NET当然会转义所有尖括号。我理解为什么通常需要正确地转义内容,但是我需要绕过该行为并将XML直接注入内容中。
这是我本来可以运行的代码。
MatchCollection matches = Regex.Matches(content, @"\[(\w+)=(\d+)]");
foreach (XElement element in voiceXmlDocument.Descendants("prompt"))
{
if (matches[0] == null)
continue;
element.Value = element.Value.Replace(matches[0].Value, @"<break time=""5s""/>");
}
这是一项正在进行中的工作,因此不必担心RegEx模式的有效性,因为我稍后将进行工作以匹配多个条件。这是概念代码的证明,重点是按所述替换占位符。我仅在此处包括迭代和RegEx代码,以说明我需要能够对已经填充了内容的整个文档执行此操作。
最佳答案
您可以使用XElement.Parse()
方法:
首先,获取XElement的外部xml,例如,
string outerXml = element.ToString();
您完全可以使用此字符串:
<prompt>
There is something I want to tell you.[pause=3]
You are my favorite caller today.[pause=1]
Have a great day!
</prompt>
那你就可以更换
outerXml = outerXml.Replace(matches[0].Value, @"<break time=""5s""/>");
然后,您可以将其解析回:
XElement repElement = XElement.Parse(outerXml);
最后,替换原始的XElement:
element.ReplaceWith(repElement);
关于c# - 用XElement替换XElement内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34641988/