如何使用C#中的linq从xml文件中提取SVG子html标记

时间:2015-04-24 17:16:27

标签: c# xml asp.net-mvc linq

我在MVC web项目中有一个xml文件,如下所示:

<Navigation>

 <item>
   <CoreId>1010</CoreId> 
   <p>
   <svg width="640" height="480" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
     <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
     <g>
       <title>Layer 1</title>
       <rect height="170" width="258" y="136.67" x="188" stroke-width="5" stroke="#000000" fill="#ff0000" id="svg_1"/>
     </g>
   </svg>
  </p>
   <Privilege>ADMIN</Privilege>
   <MenuID>10811010</MenuID>
   <ParentMenuID>1081</ParentMenuID>
   <ResourceKey>AP_Template</ResourceKey>
 </item>

我尝试使用menuId == 10811010获取项目中的svg数据;

这是我的C#代码:

public string GetVPFCore(int vpfCore)
{
    VPFCore _localitem = new VPFCore();

    try
    {

        var element = from item in xmlController.Root.Descendants("item")
                      where (string)item.Element("MenuID") == vpfCore.ToString()
                      select new
                      {
                          _data = item.Element("p").ToString()
                      };
        foreach (var t in element)
        {

            _localitem.Data = t._data;
        }
        return _localitem.Data;

    }
    catch (Exception)
    {
        throw new IOException("The XML item was not found!");
    }

}

为什么我无法将svg数据嵌入到<p>标记中来获取svg数据。

此函数的作用域是仅提取不带<p>的svg数据,并将其注入cshtml视图。

1 个答案:

答案 0 :(得分:0)

如果要访问svg元素,则需要考虑名称空间,因此定义

XNamespace svg = "http://www.w3.org/2000/svg";

然后item.Element("p").Element(svg + "svg")为您提供嵌入式SVG文档的根元素。