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

发布于 2024-10-26 04:08:42 字数 1400 浏览 1 评论 0原文

我有一个已添加信息的 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 标记上的每个属性(路径可能有也可能没有)并将它们放入一个字典<字符串,字符串>

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

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>();

我做错了什么?

I have an SVG file that I've added information to and I am trying to extract information from it using LINQ to XML. This is the first time I've used 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>

What I am trying to do is extract all the paths that don't contain a special attribute, get the path data as a string, and get every attribute on the body tag (which the path may or may not have) and put them in a Dictionary<string, string>.

This is the code I have so far, it is not returning any errors but it does not extract any paths.

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>();

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情何以堪。 2024-11-02 04:08:42

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

The document never declares the "svg" namespace. That's not going to work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文