我有一个具有层次结构的表。像这样:
alt text http://aspalliance.com/ArticleFiles/822/image002.gif
和此处显示的表格数据:
alt text http://aspalliance.com/ArticleFiles/822/image003.gif
这种策略使我能够拥有无限的类别和子类别。
我使用ASP.net 3.5 SP1和LINQ和MSSQL Server2005。 如何将其转换为XML?我可以使用数据集对象和“ .GetXML()”方法执行此操作。但是如何用LINQtoSQL或LINQtoXML实现呢???或者,如果有另一种更简单的方法来执行该操作?你的建议是什么?最好的方法?我在网上搜索但没有找到.net 3.5 featuers。
问题更新
对Murph有所了解,但现在我遇到了一个新问题。我想在我的项目中创建一个Dunamic SiteMap文件。您知道ASP.net中的SiteMap文件如下所示:
<siteMapNode url="~/Category?cid=0" title="Home" description="Home">
<siteMapNode url="~/Category?cid=1" title="a" description="" />
<siteMapNode url="~/Category?cid=2" title="b" description="" >
<siteMapNode url="~/Category?cid=3" title="c" description="" />
<siteMapNode url="~/Category?cid=4" title="d" description="" />
</siteMapNode>
</siteMapNode>
主要问题是根据Mr.Murph's Code,子类别将嵌套在元素中。但在SiteMap案例中,我们没有这样的元素,所有类别和子类都嵌套在元素中。我怎样才能改变Mr.Murph代码来塑造这个Schema?
答案 0 :(得分:2)
很快就会很快(并且彻底未经测试)。
使用Linq to SQL“滚动你自己的”XML和Linq转换为XML(这是通用的.NET而不是ASP.NET特定的)非常简单,这应该足够了,我将详细介绍一些假设(现在根据建议略微修改):
void Main()
{
DataContext dc = new DataContext();
menuXML = new XDocument();
XElement root = new XElement("menuxml",
from m in dc.Menus
where m.ParentID == null
select GetMenuXML(m));
menuXML.Add(root);
// You've now got an XML document that you can do with as you need
// For test you can save...
menuXML.Save("filename.xml");
}
private static XElement GetMenuXML(Menu menu)
{
return new XElement("category",
new XAttribute("MenuID", menu.MenuID),
new XAttribute("Text", menu.Text),
new XElement("Description", menu.Description),
new XElement("menus", menu.Menus.Select(m => GetMenuXML(m))));
}
好的,从顶部
from m in menu.ChildMenus select GetMenuXML(m)
如果它有效(!)你应该得到类似
的XML<menuxml>
<menu MenuID="1" Text="Product">
<Description>A list of products</Description>
<menus>
<menu MenuID="6" Text="Background">
<Description>Product Background</Description>
<menus>
<menu MenuID="18" Text="Internet Restriction">
<Description>Internet Restriction</Description>
<!-- children if any would be here -->
</menu>
<menu MenuID="19" Text="Speed Solution">
<Description>Speed Solutions</Description>
</menu>
</menus>
</menu>
<menu MenuID="7" Text="Background">
<Description>Product Details</Description>
</menu>
</menus>
</menu>
<!-- rest of the top level menus -->
</menuxml>
答案 1 :(得分:2)
GetMenuXML()
有一些错误。这是更正:
private static XElement GetMenuXML(Menu menu)
{
return new XElement("category",
new XAttribute("MenuID", menu.MenuID),
new XAttribute("Text", menu.Text),
new XElement("Description", menu.Description),
new XElement("menus", menu.Menus.Select(m => GetMenuXML(m))));
}