根据SVG(XML)文件中的子元素文本获取子元素的属性值

时间:2018-10-11 16:12:47

标签: c# xml linq svg

我正在尝试获取具有特定值的子元素中的子元素的特定属性的值。
子元素=“文字”和 属性=“ transform”

我正在使用XML.Linq。我查看了一些教程,包括:https://www.dreamincode.net/forums/topic/353127-linq-by-example-5-linq-to-xml-querying/

下面代码中的IEnumerable XElement try1,try2和try3都保持为空。我要返回的值是“ matrix(0.19885 0 -0 0.19885 468.353 9352.33)”

下面是XML和c#代码示例:

SVG文件中的

XML:

<svg viewBox="-4773 -7277 42423 24101" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve">
   <g clip-path="url(#clipId0)" fill="rgb(100,100,100)" stroke="rgb(100,100,100)" stroke-width="0">
      <text transform="matrix(0.19885 0 -0 0.19885 468.353 9352.33)" font-family="Verdana,'sans-serif'" font-size="1.37493">Test1 and other text</text>
      <text transform="matrix(0.19885 0 -0 0.19885 567.778 9352.33)" font-family="Verdana,'sans-serif'" font-size="1.37493">Test2 and other text</text>
   </g>
</svg>

c#代码:

    public string GetAttributeValue()
    {

        XElement xml_Elem = XElement.Load(_FilePath);
        List<string> retVal = new List<string>;


        IEnumerable<XElement> try1 =
            from el in xml_Elem.Elements("g")
            where el.Element("text").Value.Contains("Test1")
            select el;

        foreach (XElement el in try1)
        {
            retVal.Add(el.Attribute("transform").ToString());
        }


        IEnumerable<XElement> try2 =
            from el in xml_Elem.Descendants("text")
            where el.Value.Contains("Test1")
            select el;

        foreach (XElement el in try2)
        {
            retVal.Add(el.Attribute("transform").ToString());
        }


        IEnumerable<XAttribute> try3 =
            from el in xml_Elem.Descendants("text")
            where el.Value.Contains("Test1")
            select el.Attribute("transforem");

        foreach (XAttribute at in try3)
        {
            retVal.Add(at.Value);
        }

        return retVal;
    }

问题出在命名空间上。请参阅重复的帖子参考。

0 个答案:

没有答案