在SVG文件中获取XML元素时出现问题

时间:2010-11-23 18:49:35

标签: c# xml linq

我正在尝试阅读一个非常基本的SVG文件,其中包含以下内容:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="600" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <g stroke="black" >
        <line x1="75" y1="160" x2="525" y2="160" stroke-width="10"/>
    </g>
</svg>

我正在尝试获取线元素的集合。但是,以下代码不起作用:

XDocument XD = XDocument.Load(PathToFile);
XElement SVG_Element = XD.Root;
var adam = SVG_Element.Elements("line");

在检查变量时,文档已正确加载,但变量“adam”仍为null,就好像它找不到具有该名称的任何元素一样。任何帮助表示赞赏。

修改:使用后代无法解决此问题。它仍然是空的。

5 个答案:

答案 0 :(得分:7)

好吧,伙计们,我确实想到了这一点。显然我需要将命名空间指定为QName的一部分:

var adam = SVG_Element.Descendants("{http://www.w3.org/2000/svg}line");

答案 1 :(得分:0)

line元素是root的孙子,而不是孩子。请尝试使用XDocument的Descendants()方法。

答案 2 :(得分:0)

尝试这样的事情:

Dim xmldoc As XDocument = XDocument.Load(Server.MapPath("PathtosvgFile"))

        Dim Info As IEnumerable(Of XElement) = _
            From typeElement In xmldoc.Descendants.Descendants
            Where typeElement.Parent = "g"
            Select typeElement

        Dim tel As XElement

        For Each tel In Info.DescendantsAndSelf.Distinct()
         'Access each descendant here and do something.
        Next

答案 3 :(得分:-1)

我从未使用过XDocument来解析Xml文件。我使用XmlDocument。但我相信两者都是以类似的方式工作。 我猜你应首先查询“g”元素,然后查询“line”元素,如下所示:

XDocument XD = XDocument.Load(PathToFile);
XElement SVG_Element = XD.Root;
var gs = SVG_Element.Elements("g");
var adam = gs[0].Elements("line");

希望它有所帮助。

答案 4 :(得分:-1)

XDocument SVGDoc = XDocument.Load(yourfile);
XElement svg_Element = SVGDoc.Root;

IEnumerable<XElement> gElement = from e1 in svg_Element.Elements("{http://www.w3.org/2000/svg}g")
                                 select e1;
int nCounter = 0;
foreach (XElement myElement in gElement)
{
    ... 
}