Проблема использования Linq to XML в документе, который использует префиксы пространства имен - PullRequest
2 голосов
/ 24 марта 2011

У меня есть файл 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 Ответ

2 голосов
/ 24 марта 2011

В документе никогда не объявляется пространство имен "svg". Это не сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...