gpt4 book ai didi

c# - 用 XElement 替换 XElement 内容

转载 作者:行者123 更新时间:2023-11-30 23:31:18 26 4
gpt4 key购买 nike

有没有办法用其他 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 直接注入(inject)内容。

这是我的代码,否则可以正常工作。

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com