c# - 在使用命名空间前缀的文档上使用 Linq to XML 时出现问题

标签 c# linq-to-xml svg

我有一个已添加信息的 SVG 文件,我正在尝试使用 LINQ to XML 从中提取信息。这是我第一次使用 LINQ。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg:svg xmlns:svg="http://www.w3.org/2000/svg">
    *unimportant data*
    <svg:g>
        <svg:path d="m -1117.1429,-101.92353...">
             <body type="static" />
        </svg:path>
        <svg:path d="M 862.85714,112.36218...">
             <body type="kinematic" mass="1.0f" />
        </svg:path>
        <svg:path d="m -1040,-161.92353..." special="startpoint" />
    </svg:g>
    <svg:g>
        <svg:path d="m -714.2857,-90.494957...">
        *more paths*
    </svg:g>
</svg:svg>

我想做的是提取所有不包含特殊属性的路径,将路径数据作为字符串获取,并获取 body 标签上的每个属性(路径可能有也可能没有)和将它们放在 Dictionary<string, string> 中.

这是我目前的代码,它没有返回任何错误,但它没有提取任何路径。

XDocument document = XDocument.Load(filename);
XNamespace svg = "svg";

List<SVGPath> svgPaths =
    (from svgPath in document.Descendants(svg + "g").Descendants(svg + "path")
        where svgPath.Attribute("special") == null
        select new SVGPath
        {
            Data = svgPath.Attribute("d").Value,
            Properties = svgPath.Element("body").Attributes().ToDictionary(a => a.Name.LocalName, a => a.Value)
        }).ToList<SVGPath>();

我做错了什么?

最佳答案

文档从未声明“svg”命名空间。那是行不通的。

关于c# - 在使用命名空间前缀的文档上使用 Linq to XML 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5414347/

相关文章:

c# - 更好的 PropertyChanged 和 PropertyChanging 事件处理

c# - 实例化列表

c# - linq to xml检查 key 是否存在?

c# - XLINQ 是否可用于 .NET 2.0SP1

css - Sass 不使用 webpack 加载正确的背景 SVG 图像

javascript - 嵌套在另一个 SVG 元素中的 SVG 元素具有 0px*0px 大小

c# - 更新 Access 数据库

c# - 为什么我的任务队列中的所有项目都被分配相同的值?

c# - 需要有关在 .NET 4 中解析 XML 的信息

javascript - 为什么google map用Canvas做距离测量而不是SVG?