gpt4 book ai didi

c# - 如何在 C# 中正确验证 svg 字符串?

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:17 24 4
gpt4 key购买 nike

我正在尝试使用我制作的这个小 util 方法验证给定字符串是否有效 svg:

public static bool IsValidSvg(string str) {
try {
var svg = XDocument.Load(new StringReader(str));
return svg.Root.Name.LocalName.Equals("svg");
} catch {
return false;
}
}

这适用于 90% 的情况,但是,例如,我有一个 svg,它有一个开始标记,如下所示:

<svg version="1.1" id="Layer_2" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
x="0px" y="0px" width="599.33398px" height="490.66748px" viewBox="0 0 599.33398 490.66748"
enable-background="new 0 0 599.33398 490.66748" xml:space="preserve">

然后验证失败,因为它不知道 ns_extend 是什么......它抛出:

System.Xml.XmlException: Referenced entity 'ns_extend' does not exist. Line 1, position 53.

我该如何解决这个问题? svg 正确呈现,所以它应该是一个有效的 svg...

最佳答案

对您的方法进行快速而肮脏的修复:

private static bool IsSvg(string input)
{
try
{
using (var file = new FileStream(input, FileMode.Open, FileAccess.Read))
using (var reader = new XmlTextReader(file) {XmlResolver = null})
return reader.Read() && reader.Name.Equals("svg", StringComparison.InvariantCultureIgnoreCase);
}
catch
{
return false;
}
}

通过将 XmlResolver 属性设置为 null,读者将忽略 DTD 引用。

关于c# - 如何在 C# 中正确验证 svg 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33486270/

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