在使用命名空间前缀的文档上使用 Linq to XML 时出现问题
我有一个已添加信息的 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
该文档从未声明“svg”命名空间。那是行不通的。
The document never declares the "svg" namespace. That's not going to work.