我有一个数据表:Menus
表结构如下:
ID,ParentID,Name,Src
1 0 File xxx.xxx.xx
2 0 edit xxx.xxx.xx
3 1 open xxx.xxx.xx
4 2 copy xxx.xxx.xx如何用ASPX生成如下格式的XML文件(Menus.xml)
<XML id='Menus'>
<Menu>
<TitleMenu Id='1' Name='file'>
<MenuBotton Id='3' Name='open' Src='xxx.xxx.xx'></MenuBotton>
</TitleMenu>
<TitleMenu Id='2' Name='edit'>
<MenuBotton Id='4' Name='copy' Src='xxx.xxx.xx'></MenuBotton>
</TitleMenu>
</Menu>
</XML>答案如果正是我所需,个人得分>200分,分我有的是
表结构如下:
ID,ParentID,Name,Src
1 0 File xxx.xxx.xx
2 0 edit xxx.xxx.xx
3 1 open xxx.xxx.xx
4 2 copy xxx.xxx.xx如何用ASPX生成如下格式的XML文件(Menus.xml)
<XML id='Menus'>
<Menu>
<TitleMenu Id='1' Name='file'>
<MenuBotton Id='3' Name='open' Src='xxx.xxx.xx'></MenuBotton>
</TitleMenu>
<TitleMenu Id='2' Name='edit'>
<MenuBotton Id='4' Name='copy' Src='xxx.xxx.xx'></MenuBotton>
</TitleMenu>
</Menu>
</XML>答案如果正是我所需,个人得分>200分,分我有的是
具体请学习System.Xml下的XmlDocument
这是个读取XML的例子,我就懒点,你自己做吧,反正差不远!
private void Form1_Load(object sender, System.EventArgs e)
{
XmlDocument xml = new XmlDocument();
XmlDeclaration declareation = xml.CreateXmlDeclaration("1.0", "GB2312", null);
xml.AppendChild(declareation);
XmlElement XML, Menu, TitleMenu, MenuBotton;
XmlAttribute XMLID, TitleMenuId, TitltMenuName, MenuBottonId, MenuBottonName, MenuBottonSrc;
XML = xml.CreateElement("XML");
XMLID = xml.CreateAttribute("id");
XMLID.Value = "Menus";
xml.AppendChild(XML);
XML.Attributes.Append(XMLID);
Menu = xml.CreateElement("Menu");
XML.AppendChild(Menu); TitleMenu = xml.CreateElement("TitleMenu");
TitleMenuId = xml.CreateAttribute("id");
TitltMenuName = xml.CreateAttribute("Name");
TitleMenuId.Value = "1";
TitltMenuName.Value = "file";
TitleMenu.Attributes.Append(TitleMenuId);
TitleMenu.Attributes.Append(TitltMenuName);
Menu.AppendChild(TitleMenu); MenuBotton = xml.CreateElement("MenuBotton");
MenuBottonId = xml.CreateAttribute("MenuBottonId");
MenuBottonId.Value = "3";
MenuBottonName = xml.CreateAttribute("MenuBottonName");
MenuBottonName.Value = "open";
MenuBottonSrc = xml.CreateAttribute("MenuBottonSrc");
MenuBottonSrc.Value="xxx.xxx.xx";
MenuBotton.Attributes.Append(MenuBottonId);
MenuBotton.Attributes.Append(MenuBottonName);
MenuBotton.Attributes.Append(MenuBottonSrc);
TitleMenu.AppendChild(MenuBotton); TitleMenu = xml.CreateElement("TitleMenu");
TitleMenuId = xml.CreateAttribute("id");
TitltMenuName = xml.CreateAttribute("Name");
TitleMenuId.Value = "2";
TitltMenuName.Value = "edit";
TitleMenu.Attributes.Append(TitleMenuId);
TitleMenu.Attributes.Append(TitltMenuName);
Menu.AppendChild(TitleMenu); MenuBotton = xml.CreateElement("MenuBotton");
MenuBottonId = xml.CreateAttribute("MenuBottonId");
MenuBottonId.Value = "4";
MenuBottonName = xml.CreateAttribute("MenuBottonName");
MenuBottonName.Value = "copy";
MenuBottonSrc = xml.CreateAttribute("MenuBottonSrc");
MenuBottonSrc.Value="xxx.xxx.xx";
MenuBotton.Attributes.Append(MenuBottonId);
MenuBotton.Attributes.Append(MenuBottonName);
MenuBotton.Attributes.Append(MenuBottonSrc);
TitleMenu.AppendChild(MenuBotton); xml.Save("c:\\test.xml");}生成的XML<?xml version="1.0" encoding="GB2312"?>
<XML id="Menus">
<Menu>
<TitleMenu id="1" Name="file">
<MenuBotton MenuBottonId="3" MenuBottonName="open" MenuBottonSrc="xxx.xxx.xx" />
</TitleMenu>
<TitleMenu id="2" Name="edit">
<MenuBotton MenuBottonId="4" MenuBottonName="copy" MenuBottonSrc="xxx.xxx.xx" />
</TitleMenu>
</Menu>
</XML>
{
XmlDocument xml = new XmlDocument();
XmlDeclaration declareation = xml.CreateXmlDeclaration("1.0", "GB2312", null);
xml.AppendChild(declareation); XmlElement XML, Menu, TitleMenu, MenuBotton;
XmlAttribute XMLID, TitleMenuId, TitltMenuName, MenuBottonId, MenuBottonName, MenuBottonSrc;
XML = xml.CreateElement("XML");
XMLID = xml.CreateAttribute("id");
XMLID.Value = "Menus";
xml.AppendChild(XML);
XML.Attributes.Append(XMLID);
Menu = xml.CreateElement("Menu");
XML.AppendChild(Menu); TitleMenu = xml.CreateElement("TitleMenu");
TitleMenuId = xml.CreateAttribute("id");
TitltMenuName = xml.CreateAttribute("Name");
TitleMenuId.Value = "1";
TitltMenuName.Value = "file";
TitleMenu.Attributes.Append(TitleMenuId);
TitleMenu.Attributes.Append(TitltMenuName);
Menu.AppendChild(TitleMenu); MenuBotton = xml.CreateElement("MenuBotton");
MenuBottonId = xml.CreateAttribute("Id");
MenuBottonId.Value = "3";
MenuBottonName = xml.CreateAttribute("Name");
MenuBottonName.Value = "open";
MenuBottonSrc = xml.CreateAttribute("Src");
MenuBottonSrc.Value="xxx.xxx.xx";
MenuBotton.Attributes.Append(MenuBottonId);
MenuBotton.Attributes.Append(MenuBottonName);
MenuBotton.Attributes.Append(MenuBottonSrc);
TitleMenu.AppendChild(MenuBotton); TitleMenu = xml.CreateElement("TitleMenu");
TitleMenuId = xml.CreateAttribute("id");
TitltMenuName = xml.CreateAttribute("Name");
TitleMenuId.Value = "2";
TitltMenuName.Value = "edit";
TitleMenu.Attributes.Append(TitleMenuId);
TitleMenu.Attributes.Append(TitltMenuName);
Menu.AppendChild(TitleMenu); MenuBotton = xml.CreateElement("MenuBotton");
MenuBottonId = xml.CreateAttribute("Id");
MenuBottonId.Value = "4";
MenuBottonName = xml.CreateAttribute("Name");
MenuBottonName.Value = "copy";
MenuBottonSrc = xml.CreateAttribute("Src");
MenuBottonSrc.Value="xxx.xxx.xx";
MenuBotton.Attributes.Append(MenuBottonId);
MenuBotton.Attributes.Append(MenuBottonName);
MenuBotton.Attributes.Append(MenuBottonSrc);
TitleMenu.AppendChild(MenuBotton); xml.Save("c:\\test.xml");}
xml
<?xml version="1.0" encoding="GB2312"?>
<XML id="Menus">
<Menu>
<TitleMenu id="1" Name="file">
<MenuBotton Id="3" Name="open" Src="xxx.xxx.xx" />
</TitleMenu>
<TitleMenu id="2" Name="edit">
<MenuBotton Id="4" Name="copy" Src="xxx.xxx.xx" />
</TitleMenu>
</Menu>
</XML>
tw.Formatting = Formatting.Indented;
tw.WriteStartDocument();tw.WriteStartElement("XML");
tw.WriteAttributeString("id","Menus");
tw.WriteStartElement("Menu");
tw.WriteStartElement("TitleMenu");
tw.WriteAttributeString("id", "1");
tw.WriteAttributeString("Name", "file");
//etc.
tw.WriteEndElement();
//etc.
tw.WriteEndDocument();tw.Flush();
tw.Close();里面的元素、属性、字段值就自己添加吧,一定要注意嵌套元素。
function ShowMenu($Parent_id) {
global $db,$db_t,$dir,$tree_id,$User_id,$Username;
if ($Parent_id=="")
$Parent_id=0;
$query="select * from $db_t[Menus] where Parent_id=$Parent_id order by PRI asc";
$num=Query_db($query,'num');
if ($num>0) {
$result=Query_db($query,'result');
for ($i=0;$i<$num;$i++) {
$array=Rerult_to_array ($result);
$query1="select ID from $db_t[Power] where User_id=$User_id and Menu_id=$array[ID]";
$num1=Query_db($query1,'num');
if ($num1>0 || $Username=='admin') {
if ($array[Parent_id]==$tree_id) {
$title="<TitleMenu Id='$array[ID]' Name='$array[Txt]'>\n";
$button="</TitleMenu>\n";
}
else {
if ($array[Icon]=="")
$array[Icon]='None.gif';
$Url_info=$array[Parent_id].'@'.$array[Url].'@'.$array[Txt].'@'.$User_id.'@'.$Username;
$title="<MenuBotton Id='$array[ID]' Name='$array[Txt]' Src='frame.php?Parent=$Url_info' Ico='$dir[icon]/$array[Icon]' Order='$array[ID]$array[Line]'>\n";
$button="</MenuBotton>\n";
}
echo "$title";
ShowMenu($array[0]);
echo "$button";
}
}
}
你的OPEN,EDIT,COPY。这些你想怎么处理。。
private void Form1_Load(object sender, System.EventArgs e)
{
XmlDocument xml = new XmlDocument();
XmlDeclaration declareation = xml.CreateXmlDeclaration("1.0", "GB2312", null);
xml.AppendChild(declareation); XmlElement XML, Menu;
XmlAttribute XMLID;
XML = xml.CreateElement("XML");
XMLID = xml.CreateAttribute("id");
XMLID.Value = "Menus";
xml.AppendChild(XML);
XML.Attributes.Append(XMLID);
Menu = xml.CreateElement("Menu");
XML.AppendChild(Menu); Menu.AppendChild(CreateElement(xml, "1", "file", "3", "open", "xxx.xxx.xx"));
Menu.AppendChild(CreateElement(xml, "2", "edit", "4", "copy", "xxx.xxx.xx"));
xml.Save("c:\\test.xml");
}private XmlElement CreateElement(XmlDocument xml, string Menuid_v, string MenuName_v, string Bottonid_v, string BottonName_v, string BottonSrc_v)
{
XmlElement TitleMenu, MenuBotton;
XmlAttribute TitleMenuId, TitltMenuName, MenuBottonId, MenuBottonName, MenuBottonSrc;
TitleMenu = xml.CreateElement("TitleMenu");
TitleMenuId = xml.CreateAttribute("id");
TitltMenuName = xml.CreateAttribute("Name");
TitleMenuId.Value = Menuid_v;
TitltMenuName.Value = MenuName_v;
TitleMenu.Attributes.Append(TitleMenuId);
TitleMenu.Attributes.Append(TitltMenuName); MenuBotton = xml.CreateElement("MenuBotton");
MenuBottonId = xml.CreateAttribute("Id");
MenuBottonId.Value = Bottonid_v;
MenuBottonName = xml.CreateAttribute("Name");
MenuBottonName.Value = BottonName_v;
MenuBottonSrc = xml.CreateAttribute("Src");
MenuBottonSrc.Value = BottonSrc_v;
MenuBotton.Attributes.Append(MenuBottonId);
MenuBotton.Attributes.Append(MenuBottonName);
MenuBotton.Attributes.Append(MenuBottonSrc);
TitleMenu.AppendChild(MenuBotton); return TitleMenu;
}
//读取DataRead
while(dr.Read())
{
TitleMenu = xml.CreateElement("TitleMenu");
TitleMenuId = xml.CreateAttribute("id");
TitltMenuName = xml.CreateAttribute("Name");
TitleMenuId.Value = dr["id"];
TitltMenuName.Value = dr["Name"];
TitleMenu.Attributes.Append(TitleMenuId);
TitleMenu.Attributes.Append(TitltMenuName);
Menu.AppendChild(TitleMenu);}
for(int i=0;i<10;i++)
{
Menu.AppendChild(CreateElement(xml, i.ToString(), "file", "3", "open", "xxx.xxx.xx"));
}xml.Save("c:\\test.xml");
XmlDocument xmlDoc = new XmlDocument();
XmlElement nodRoot;
nodRoot = (XmlElement)xmlDoc.AppendChild(xmlDoc.CreateElement("Root"));
string strConn,strSQL;
strConn = "你的数据库连接字符串";
strSQL = "筛选数据的sql for xml auto,elements";
SqlConnection cn = new SqlConnection(strConn);
cn.Open();
SqlCommand cmd = new SqlCommand(strSQL,cn);
XmlReader rdr = cmd.ExecuteXmlReader();
do
nodRoot.AppendChild(xmlDoc.ReadNode(rdr));
while(rdr.EOF == false);
rdr.Close();
cn.Close();
string strPathToXml = "C:\\MyData.XML";
xmlDoc.Save(strPathToXml);
你甚至可以用在 IIS 中配置 SQL XML 支持(SQL Server) 来输出xml
1.读取parentId = 0的数据SELECT * FROM Menus WHERE ParentID = 0,将此数据填充到DataSet(表Parnet)
2.读取parentId <> 0的数据SELECT * FROM Menus WHERE ParentID <> 0,将此数据填充到DataSet(表Child)
3.设置关系,
DataColumn parentCol;
DataColumn childCol; parentCol = ds.Tables["Parent"].Columns["ID"];
childCol = ds.Tables["Child"].Columns["ParentID"]; DataRelation relParentChild;
relParentChild= new DataRelation("ParentChild", parentCol, childCol); ds.Relations.Add(relParentChild);
4.生成XML文件
Function GetTotal() 递归部分
//读取DataRead
while(dr.Read())
{
TitleMenu = xml.CreateElement("TitleMenu");
TitleMenuId = xml.CreateAttribute("id");
TitltMenuName = xml.CreateAttribute("Name");
TitleMenuId.Value = dr["id"];
TitltMenuName.Value = dr["Name"];
TitleMenu.Attributes.Append(TitleMenuId);
TitleMenu.Attributes.Append(TitltMenuName);
Menu.AppendChild(TitleMenu);}
SELECT
1 AS Tag,
NULL AS Parent,
TitleMenu.ID AS [TitleMenu!1!Id],
TitleMenu.Name AS [TitleMenu!1!Name],
NULL AS [MenuBotton!2!Id],
NULL AS [MenuBotton!2!Name],
NULL AS [MenuBotton!2!Src]
FROM [Menu] TitleMenu UNION ALL SELECT
2 AS Tag,
1 AS Parent,
TitleMenu.ID,
NULL,
MenuBotton.ID,
MenuBotton.Name,
MenuBotton.Src
FROM [Menu] MenuBotton,[Menu] TitleMenu
WHERE MenuBotton.ParentID=TitleMenu.ID
ORDER BY [TitleMenu!1!Id] ASC, [MenuBotton!2!Id] ASC
FOR XML EXPLICIT SELECT '</Menu></XML>'
楼主要的
既然 MSSQL 2000 直接提供了 对 XML 的支持又干嘛不用
而要用一种吃力不讨好的方法...
<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.SqlClient"%>
<script Language="C#" runat="server">
void Page_Load(Object sender,EventArgs e)
{
string strConn,strSQL;
DataSet ds=new DataSet();
SqlConnection Conn=null;
SqlDataAdpter da=null;strConn="server=localhost;uid=;pwd=;database=;";
strSQL="select * from 表名";Conn=new SqlConnection=(strConn);
da=new SqlDataAdapter(strSQL,strConn);da.Fill(ds);
ds.WriteXml(Server.MapPath("aa.xml"));
Response.Write("Xml File Generated");
}
</script>
<%@ Import Namespace="System"%>
<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.SqlClient"%>
<Script runat="server">
void Page_Load(object sender,EventArgs e)
{
GetMenuData();
MakeXmlTree();
}
void GetMenuData()
{
if (ViewState["MenuData"]==null)
{
string SelectCommand = "select * from Menus";
//string ConnectionString = 数据库连接字符串;
SqlDataAdapter myAdapter = new SqlDataAdapter(SelectCommand,ConnectionString);
DataSet ds = new DataSet();
myAdapter.Fill(ds);
ViewState["MenuData"] = ds;
}
}
void MakeXmlTree()
{
Response.Write("Xml id='Menus'");
Reeponse.Write("<Menu>");
MakeTitleMenu()
Response.Write("</Menu>")
}
void MakeTitleMeun()
{
DataView dv = new DataView(((DataSet)(ViewState["MenuData"])).Tables[0]);
dv.RowFilter = "ParentID=0";
foreach(DataRowView drv in dv)
{
string BeginTitleMenuMark = "<TitleMenu Id='" + drv["ID"].ToString() + "' Name='" + drv["Name"].ToString() + "'>";
string EndTitleMenuMark = "</TitleMenu>";
Response.Write(BeginTitleMenuMark);
MakeMenuButton(drv["ID"].ToString());
Response.Write(EndTitleMenuMark);
}
}
void MakeMenuButton(parentId)
{
DataView drv = DataView dv = new DataView(((DataSet)(ViewState["MenuData"])).Tables[0]);
dv.RowFilter = "ParentID=" + parentId;
foreach(DataRowView drv in dv)
{
string BeginMenuButtonMark = "<MenuButton Id='" + drv["ID"].ToString() + "' Name='" + drv["Name"].ToString() + "' Src='" + drv["Src"].ToString() +"'>";
string EndMenuButtonMark = "</MenuButton>";
Response.Write(BeginTitleMenuMark);
Response.Write(EndTitleMenuMark);
}
}
</Script>
<html>
<head></head>
<body>
</body>
</html>
上面的代码是直接打印在HTML页上,楼主要输出到磁盘的话,自己去查一下使用Stream生成文本文件就可以了.