解析SVG需处理命名空间:①使用XNamespace声明默认命名空间;②查询元素时需添加命名空间前缀;③普通属性直接获取,带前缀属性需用对应命名空间。

在C#中处理SVG这类具有命名空间和特定属性结构的XML方言时,不能像处理普通XML那样直接使用XDocument或XmlDocument进行简单查询。SVG基于XML,并使用了XML命名空间(特别是默认命名空间),这会影响元素和属性的查找方式。正确解析SVG需要特别注意命名空间的声明与使用。
SVG文档通常包含如下根元素:
<font face="Courier New"><svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="10" y="10" width="100" height="50"/> </svg></font>
这里的xmlns="http://www.w3.org/2000/svg"定义了一个默认命名空间。这意味着所有未加前缀的元素(如svg、rect)都属于该命名空间。如果忽略这一点,在用LINQ to XML查询时将无法匹配到这些元素。
在C#中使用System.Xml.Linq时,必须显式声明命名空间才能进行有效查询:
注意:即使属性没有显式命名空间前缀,在默认命名空间下的元素所包含的属性也无需加命名空间。因此Attribute("x")可以直接使用,不需要写成svgNs + "x"。
某些SVG可能包含其他命名空间,例如XLink用于引用资源:
<font face="Courier New"><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<use xlink:href="#icon" x="10" y="10"/>
</svg></font>这时需要为xlink单独定义命名空间:
关键点是:xlink这样的非默认命名空间必须通过前缀+命名空间的方式访问其属性。
Descendants("rect")能查到元素 —— 必须加上命名空间。width、id)仍按名称直接获取;只有带命名空间前缀的属性才需命名空间参与。Name.Namespace来确认。基本上就这些。只要掌握命名空间的处理逻辑,C#完全可以高效解析SVG中的结构与属性信息。不复杂但容易忽略。
以上就是C#中解析SVG这类特殊的XML方言 命名空间与特定属性的处理的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号