在使用命名空间前缀的文档上使用Linq to XML的问题

时间:2011-03-24 03:16:39

标签: 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>();

我做错了什么?

1 个答案:

答案 0 :(得分:2)

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