Asp.net 删除xmlns=";“什么?”;使用linq从xml文档到xml
我正在解析一个xml文件 xml的第一行看起来像Asp.net 删除xmlns=";“什么?”;使用linq从xml文档到xml,asp.net,.net,xml-parsing,linq-to-xml,Asp.net,.net,Xml Parsing,Linq To Xml,我正在解析一个xml文件 xml的第一行看起来像 <DataSetMenu xmlns="http://tempuri.org/DataSetMenu.xsd"> 这根本不起作用。当我试图访问xml的数据时,它会给我一个错误,对象引用未设置为对象的实例 XML文件 <DataSetMenu xmlns="http://tempuri.org/DataSetMenu.xsd"> <MenuCategories> <MenuCat
<DataSetMenu xmlns="http://tempuri.org/DataSetMenu.xsd">
这根本不起作用。当我试图访问xml的数据时,它会给我一个错误,对象引用未设置为对象的实例
XML文件
<DataSetMenu xmlns="http://tempuri.org/DataSetMenu.xsd">
<MenuCategories>
<MenuCatID>10108</MenuCatID>
<MenuCatName>SPEICALS</MenuCatName>
<BusinessEntityID>20137</BusinessEntityID>
<DisplayIndex>10107</DisplayIndex>
<MenuCatDesc />
<Visible>true</Visible>
<ImagePath />
</MenuCategories>
<MenuCategories>
<MenuCatID>10109</MenuCatID>
<MenuCatName>GENERAL MENU</MenuCatName>
<BusinessEntityID>20137</BusinessEntityID>
<DisplayIndex>10108</DisplayIndex>
< MenuCatDesc />
<Visible>true</Visible>
<ImagePath />
</MenuCategories>
<MenuGroups>
<MenuGroupID>110079</MenuGroupID>
<MenuCatID>10108</MenuCatID>
<MenuGroupName>SPECIAL OFFERS</MenuGroupName>
<MenuGroupDesc />
<Visible>true</Visible>
<DisplayIndex>0</DisplayIndex>
<MenuTypeID>1</MenuTypeID>
<ImagePath />
<ServiceTimeEnforced>false</ServiceTimeEnforced>
<ServiceStartTime>1900-01-01T11:00:00-06:00</ServiceStartTime>
<ServiceEndTime>1900-01-01T15:00:00-06:00</ServiceEndTime>
<Monday>true</Monday>
<Tuesday>true</Tuesday>
<Wednesday>true</Wednesday>
<Thursday>true</Thursday>
<Friday>true</Friday>
<Saturday>true</Saturday>
<Sunday>true</Sunday>
</MenuGroups>
</DataSetMenu>
10108
特殊
20137
10107
真的
10109
总菜单
20137
10108
真的
110079
10108
特价
真的
0
1.
假的
1900-01-01T11:00:00-06:00
1900-01-01T15:00:00-06:00
真的
真的
真的
真的
真的
真的
真的
给我一个解决方案,这样它就可以正常工作了。或以任何方式删除此属性
谢谢
现在它正在这里工作
private void GetGroupItems(XElement xdocument,Int32 MenuCatID)
{
var MenuGroup=来自xdocument.Elements(“MenuGroups”)中的nm
其中(int)nm.Element(“MenuCatID”)==MenuCatID
选择nm;
foreach(菜单组中的XElement GroupName)
{
Int32 MenuGroupID=Convert.ToInt32(GroupName.Element(“MenuGroupID”).Value);
字符串MenuGroupName=GroupName.Element(“MenuGroupName”).Value;
sb.追加(“+MenuGroupName+”);
某人加上(“”);
GetMenuItems(MenuGroupID,xdocument);
某人加上(“”);
某人加上(“”);
}
}
请告诉我,我应该如何修改它?这里要记住的关键是,您使用的不是属性,而是名称空间声明。这就是为什么不能删除该属性。查看帮助中的建议是否正确。查询XML时必须指定名称空间 创建
XNamespace
实例:
var ns = XNamespace.Get("http://tempuri.org/DataSetMenu.xsd");
然后使用:
在Elements()
方法调用中,如下所示:
IEnumerable<XElement> MenuGroups = xdocument.Elements();
sb.Append("<link href='StyleSheet.css' rel='stylesheet' type='text/css' />");
foreach (var xel in MenuGroups)
{
if (xel.Elements(ns + "MenuCatName").Any())
{
Int32 MenuCatID = Convert.ToInt32(xel.Element(ns + "MenuCatID").Value);
string MenuCatName = xel.Element(ns + "MenuCatName").Value;
sb.Append("<div class='CategoryDiv'><h1 class='category'>" + MenuCatName + " </h1>");
GetGroupItems(xdocument, MenuCatID);
}
}
IEnumerable MenuGroups=xdocument.Elements();
某人加上(“”);
foreach(菜单组中的变量xel)
{
if(xel.Elements(ns+“MenuCatName”).Any())
{
Int32 MenuCatID=Convert.ToInt32(像素元素(ns+“MenuCatID”).Value);
字符串MenuCatName=xel.Element(ns+“MenuCatName”).Value;
sb.追加(“+MenuCatName+”);
GetGroupItems(xdocument,MenuCatID);
}
}
这真是一个大文件。向您展示了前几个节点。我已经用xml代码更新了我的问题。我认为找到xml文件的创建者并告诉他们给您一个具有有效命名空间的xml文件会更有意义……如果可能的话。噢,非常感谢。它起作用了。但在某个地方我遇到了问题。这也是因为名称空间。请告诉我如何解决它。我正在更新我的问题。谢谢。我已经更新了我的问题。请检查添加的最后一个代码。我需要你多一点帮助来解决这个问题。谢谢。现在我已经在“XNamespace.Get()”中给出了静态名称空间。但如果我想让它充满活力。因为不同的xml文件可能包含不同的名称空间。我能做到这一点吗?
private void GetGroupItems(XElement xdocument, Int32 MenuCatID)
{
var MenuGroup = from nm in xdocument.Elements("MenuGroups")
where (int)nm.Element("MenuCatID") == MenuCatID
select nm;
foreach (XElement GroupName in MenuGroup)
{
Int32 MenuGroupID = Convert.ToInt32(GroupName.Element("MenuGroupID").Value);
string MenuGroupName = GroupName.Element("MenuGroupName").Value;
sb.Append("<div class='IType'>" + MenuGroupName + " </div>");
sb.Append("<table class='restaurantlist'><tbody><tr><td class='righttd'>");
GetMenuItems(MenuGroupID, xdocument);
sb.Append("</td></tr></tbody></table>");
sb.Append("<div class='restaurantlistdiv'><div style='clear: both;'></div>");
}
}
var ns = XNamespace.Get("http://tempuri.org/DataSetMenu.xsd");
public static XName operator +(
XNamespace ns,
string localName
)
IEnumerable<XElement> MenuGroups = xdocument.Elements();
sb.Append("<link href='StyleSheet.css' rel='stylesheet' type='text/css' />");
foreach (var xel in MenuGroups)
{
if (xel.Elements(ns + "MenuCatName").Any())
{
Int32 MenuCatID = Convert.ToInt32(xel.Element(ns + "MenuCatID").Value);
string MenuCatName = xel.Element(ns + "MenuCatName").Value;
sb.Append("<div class='CategoryDiv'><h1 class='category'>" + MenuCatName + " </h1>");
GetGroupItems(xdocument, MenuCatID);
}
}