【发布时间】:2020-02-11 12:22:49
【问题描述】:
我有一个常见问题,我没有找到合适的解决方案。我有多个带有特定标签(例如 MIME_SOURCE)的 XML 字符串,但我不知道哪个 XML 字符串包含哪个值。但我必须替换所有出现的地方。
另一方面,我有一个字典,其中包含 XML 的所有可能值作为键和要替换为值的值。正如我所说,我不知道在哪个 XML 中替换什么。
例如
第一个 XML 的一部分
<MIME>
<MIME_SOURCE>\Web\Bilder Groß\1509_131_021_01.jpg</MIME_SOURCE>
</MIME>
<MIME>
<MIME_SOURCE>\Web\Bilder Groß\1509_131_021_01_MitWasserzeichen.jpg</MIME_SOURCE>
</MIME>
<MIME>
<MIME_SOURCE>\Web\Bilder Groß\icon_top.jpg</MIME_SOURCE>
</MIME>
第二个 XML 的一部分:
<MIME>
<MIME_SOURCE>\Web\Bilder klein\5478.jpg</MIME_SOURCE>
</MIME>
字典看起来像:
{"\Web\Bilder Groß\1509_131_021_01.jpg", "/Web/Bilder Groß/1509_131_021_01.jpg"}
{"\Web\Bilder Groß\1509_131_021_01_MitWasserzeichen.jpg", "/Web/Bilder Groß/1509_131_021_01_MitWasserzeichen.jpg"}
{"\Web\Bilder Groß\icon_top.jpg", "icon_top.jpg"}
{"\Web\Bilder klein\5478.jpg", "5478.jpg"}
我的主要问题是,如果我为每个 XML 字符串遍历字典,那么工作量将是 XML 字符串的数量乘以字典中的条目数 (n*m)。这对我来说真的很糟糕,因为字典中可能有大约一百万个 XML 字符串和至少数千个条目。
目前我正在为每个 XML 字典的每个键使用 string.Replace。
你知道如何加快这个过程吗?
编辑:
我已将代码更改为以下代码:
var regex = new Regex(@"<MIME_SOURCE>[\s\S]*?<\/MIME_SOURCE>");
foreach (Match match in regex.Matches(stringForXml))
{
DoReplacements...
}
这符合现在的要求,因为替换只会针对 XML 中的每个 MIME_SOURCE 进行。但我也会看看上面提到的算法。
【问题讨论】:
-
前段时间我也遇到过类似的问题,看看这个问题,或许能帮到你:stackoverflow.com/questions/46339057/…
-
好的,谢谢!这似乎是一个非常相似的问题。我会检查算法。
标签: c# xml string performance replace