【发布时间】:2015-04-24 17:16:26
【问题描述】:
我在 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> 标签中就无法获取它。
这个函数的作用是只提取没有<p> 的svg 数据并将其注入到cshtml 视图中。
【问题讨论】:
-
那么当你没有有
p标签时会发生什么?我强烈建议不要抓住Exception并就问题所在做出假设 - 这很可能是一个完全不同的问题。如果您能提供一个简短但完整的程序来演示该问题,那将非常有帮助。 (当您只提供一个属性然后提取时,为什么还要使用匿名类型?为什么要创建一个VPFCore对象,只是为了设置然后检索一个属性?有很多更简单的代码,您可以使用相同的效果。) -
不是很明显 - 它只是返回一个字符串......那么重复设置
Data属性然后从获取它的值返回值不能仅仅通过返回element.Last()来完成,已将select子句更改为select item.Element("p").ToString()?如果没有<p>标签,我们仍然不知道出了什么问题,而且我们仍然没有一个简短但完整的示例...... -
谢谢 Jon,该函数主要用于操作自定义对象 VPFCores,Data 成员假设该对象包含来自 DB 存储库的实际数据。我已按照要求将该服务更改为 xml。但是,完全同意,匿名对象在这里很丰富。我会删除它。当我得到空值时。
-
当然,我在旧金山机场,准备前往另一个城市。给我几个小时,我会更新这个问题。我必须赶上计划。但是,是的,我的问题是 Martin 提到的关于 svg 命名空间的问题,以及为什么用
标签: c# xml asp.net-mvc linq