gpt4 book ai didi

asp.net - 使用linq to xml从xml文档中删除xmlns ="something"

转载 作者:行者123 更新时间:2023-12-02 02:04:30 25 4
gpt4 key购买 nike

我正在解析一个 xml 文件。

第一行xml的样子;

<DataSetMenu xmlns="http://tempuri.org/DataSetMenu.xsd">

我正在使用下面的代码来解析 xml。

string filename = Request.QueryString["file"].ToString();
XElement xdocument = XElement.Load(Server.MapPath("xml\\" + filename));

xdocument.Attribute("xmlns").Remove();

IEnumerable<XElement> MenuGroups = xdocument.Elements();

sb.Append("<link href='StyleSheet.css' rel='stylesheet' type='text/css' />");
foreach (var xel in MenuGroups)
{

if (xel.Elements("MenuCatName").Any())
{
Int32 MenuCatID = Convert.ToInt32(xel.Element("MenuCatID").Value);
string MenuCatName = xel.Element("MenuCatName").Value;
sb.Append("<div class='CategoryDiv'><h1 class='category'>" + MenuCatName + " </h1>");
GetGroupItems(xdocument, MenuCatID);
}
}

但是当 xml 文件的第一个节点包含:

 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>

给我一​​个解决方案,让它工作正常。或者以任何方式删除此属性。

谢谢。

现在在这里工作

 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>");
}
}

请告诉我,我应该如何修改它?

最佳答案

查询 XML 时必须指定命名空间。

创建 XNamespace 实例:

var ns = XNamespace.Get("http://tempuri.org/DataSetMenu.xsd");

然后使用XNamespace + String operator implementation :

public static XName operator +(
XNamespace ns,
string localName
)

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);
}
}

关于asp.net - 使用linq to xml从xml文档中删除xmlns ="something",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15767615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com