<Content>
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
……
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
</Content>
我现在要把他以table的方式显示出来,其中上面的每一个<row></row>对应一个<tr></tr>即为一条记录,<item></item>为一个<td></td>即为一个字段。
问题:要显示的table中的第一行也即字段名不能从XML中读,只能自己根据需要添加让客户容易明白的字段名,如果每个XML配合一个XSL这个问题就可以解决了,目前小弟希望这些XML只用一个XSL就可以搞定,不知道可否?
另:小弟的源码采用C#书写,希望可以从C#向XSL传参数来实现,比如如果我知道这个table里面有5列的话,我就在XSL中定义5个参数,然后在C#中传5个值进去。但是目前的问题是,每个页面的table的列数不是固定的,所以就不知道在XSL中定义多少个参数,不知道是XSL的参数值是否可以为数组,如可以的话,似乎就可以解决了。这个我不知道,希望有人可以指点一下。如果大家有好的解决这个问题的方法希望可以给小弟分享一下!跪地拜谢了~~~
3 个解决方案
#1
在每个XML文件中增加一个或多个<Content>的属性或在<Content>中增加一个或多个元素,然后在XSL中引用解析这些属性/元素不就可以了吗?
例如:Table的字段名:ID,名称,单位,数量,单价,总价,那么:
<Content field="ID,名称,单位,数量,单价,总价">
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
……
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
</Content>
或
<Content>
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
……
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
<field>ID,名称,单位,数量,单价,总价</field>
</Content>
XSL文件中采用
<xsl:variable name="tabField">
<xsl:value-of select="/Content/@field" />
</xsl:variable>
或
<xsl:variable name="tabField">
<xsl:value-of select="/Content/field" />
</xsl:variable>
然后利用循环方式取出以","为分隔的各组的值,置入Table的相应位置即可。
例如:Table的字段名:ID,名称,单位,数量,单价,总价,那么:
<Content field="ID,名称,单位,数量,单价,总价">
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
……
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
</Content>
或
<Content>
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
……
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
<field>ID,名称,单位,数量,单价,总价</field>
</Content>
XSL文件中采用
<xsl:variable name="tabField">
<xsl:value-of select="/Content/@field" />
</xsl:variable>
或
<xsl:variable name="tabField">
<xsl:value-of select="/Content/field" />
</xsl:variable>
然后利用循环方式取出以","为分隔的各组的值,置入Table的相应位置即可。
#2
帮你up
#3
是否是你需要的:
test.aspx.cs:
using System;
using System.Web;
using System.Xml;
using System.Xml.Xsl;
namespace ssm1226.net.xml
{
/// <summary>
/// trans_table 的摘要说明。
/// </summary>
public class trans_table : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string[] arrColumns={"ssm1226-1","ssm1226-2","ssm1226-3","ssm1226-4"};
Response.Clear();
Response.Write(builderTable(arrColumns));
Response.End();
}
private string builderTable(string[] arrColumns)
{
XmlDocument xmldoc=new XmlDocument();
xmldoc.Load(Server.MapPath("csdn0001.xml"));
XmlNode oNode=xmldoc.CreateElement("Columns");
XmlNode oNodeTemp;
for(int i=0;i<arrColumns.Length;i++)
{
oNodeTemp=xmldoc.CreateElement("Column");
oNodeTemp.InnerText=arrColumns[i];
oNode.AppendChild(oNodeTemp);
}
xmldoc.DocumentElement.AppendChild(oNode);
XslTransform xslTrans=new XslTransform();
xslTrans.Load(Server.MapPath("csdn0001.xsl"));
XmlReader xr=xslTrans.Transform(xmldoc,null);
xr.MoveToContent();
return xr.ReadOuterXml();
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
csdn0001.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Content>
<row>
<item value="a1" id="1">aa1</item>
<item value="a2" id="2">aa2</item>
<item value="a3" id="3">aa3</item>
</row>
<row>
<item value="b1" id="1">bb1</item>
<item value="b2" id="2">bb2</item>
<item value="b3" id="3">bb3</item>
</row>
</Content>
csdn0001.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table border="1">
<tr>
<xsl:apply-templates select="//Columns/Column"/>
</tr>
<xsl:apply-templates select="//row"/>
</table>
</xsl:template>
<xsl:template match="Column">
<td align="center" style="font-weight:bold">
<xsl:value-of select="."/>
</td>
</xsl:template>
<xsl:template match="row">
<tr>
<xsl:apply-templates />
</tr>
</xsl:template>
<xsl:template match="item">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
</xsl:stylesheet>
test.aspx.cs:
using System;
using System.Web;
using System.Xml;
using System.Xml.Xsl;
namespace ssm1226.net.xml
{
/// <summary>
/// trans_table 的摘要说明。
/// </summary>
public class trans_table : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string[] arrColumns={"ssm1226-1","ssm1226-2","ssm1226-3","ssm1226-4"};
Response.Clear();
Response.Write(builderTable(arrColumns));
Response.End();
}
private string builderTable(string[] arrColumns)
{
XmlDocument xmldoc=new XmlDocument();
xmldoc.Load(Server.MapPath("csdn0001.xml"));
XmlNode oNode=xmldoc.CreateElement("Columns");
XmlNode oNodeTemp;
for(int i=0;i<arrColumns.Length;i++)
{
oNodeTemp=xmldoc.CreateElement("Column");
oNodeTemp.InnerText=arrColumns[i];
oNode.AppendChild(oNodeTemp);
}
xmldoc.DocumentElement.AppendChild(oNode);
XslTransform xslTrans=new XslTransform();
xslTrans.Load(Server.MapPath("csdn0001.xsl"));
XmlReader xr=xslTrans.Transform(xmldoc,null);
xr.MoveToContent();
return xr.ReadOuterXml();
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
csdn0001.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Content>
<row>
<item value="a1" id="1">aa1</item>
<item value="a2" id="2">aa2</item>
<item value="a3" id="3">aa3</item>
</row>
<row>
<item value="b1" id="1">bb1</item>
<item value="b2" id="2">bb2</item>
<item value="b3" id="3">bb3</item>
</row>
</Content>
csdn0001.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table border="1">
<tr>
<xsl:apply-templates select="//Columns/Column"/>
</tr>
<xsl:apply-templates select="//row"/>
</table>
</xsl:template>
<xsl:template match="Column">
<td align="center" style="font-weight:bold">
<xsl:value-of select="."/>
</td>
</xsl:template>
<xsl:template match="row">
<tr>
<xsl:apply-templates />
</tr>
</xsl:template>
<xsl:template match="item">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
</xsl:stylesheet>
#1
在每个XML文件中增加一个或多个<Content>的属性或在<Content>中增加一个或多个元素,然后在XSL中引用解析这些属性/元素不就可以了吗?
例如:Table的字段名:ID,名称,单位,数量,单价,总价,那么:
<Content field="ID,名称,单位,数量,单价,总价">
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
……
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
</Content>
或
<Content>
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
……
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
<field>ID,名称,单位,数量,单价,总价</field>
</Content>
XSL文件中采用
<xsl:variable name="tabField">
<xsl:value-of select="/Content/@field" />
</xsl:variable>
或
<xsl:variable name="tabField">
<xsl:value-of select="/Content/field" />
</xsl:variable>
然后利用循环方式取出以","为分隔的各组的值,置入Table的相应位置即可。
例如:Table的字段名:ID,名称,单位,数量,单价,总价,那么:
<Content field="ID,名称,单位,数量,单价,总价">
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
……
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
</Content>
或
<Content>
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
……
<row>
<item value="" id=""></item>
……
<item value="" id=""></item>
</row>
<field>ID,名称,单位,数量,单价,总价</field>
</Content>
XSL文件中采用
<xsl:variable name="tabField">
<xsl:value-of select="/Content/@field" />
</xsl:variable>
或
<xsl:variable name="tabField">
<xsl:value-of select="/Content/field" />
</xsl:variable>
然后利用循环方式取出以","为分隔的各组的值,置入Table的相应位置即可。
#2
帮你up
#3
是否是你需要的:
test.aspx.cs:
using System;
using System.Web;
using System.Xml;
using System.Xml.Xsl;
namespace ssm1226.net.xml
{
/// <summary>
/// trans_table 的摘要说明。
/// </summary>
public class trans_table : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string[] arrColumns={"ssm1226-1","ssm1226-2","ssm1226-3","ssm1226-4"};
Response.Clear();
Response.Write(builderTable(arrColumns));
Response.End();
}
private string builderTable(string[] arrColumns)
{
XmlDocument xmldoc=new XmlDocument();
xmldoc.Load(Server.MapPath("csdn0001.xml"));
XmlNode oNode=xmldoc.CreateElement("Columns");
XmlNode oNodeTemp;
for(int i=0;i<arrColumns.Length;i++)
{
oNodeTemp=xmldoc.CreateElement("Column");
oNodeTemp.InnerText=arrColumns[i];
oNode.AppendChild(oNodeTemp);
}
xmldoc.DocumentElement.AppendChild(oNode);
XslTransform xslTrans=new XslTransform();
xslTrans.Load(Server.MapPath("csdn0001.xsl"));
XmlReader xr=xslTrans.Transform(xmldoc,null);
xr.MoveToContent();
return xr.ReadOuterXml();
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
csdn0001.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Content>
<row>
<item value="a1" id="1">aa1</item>
<item value="a2" id="2">aa2</item>
<item value="a3" id="3">aa3</item>
</row>
<row>
<item value="b1" id="1">bb1</item>
<item value="b2" id="2">bb2</item>
<item value="b3" id="3">bb3</item>
</row>
</Content>
csdn0001.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table border="1">
<tr>
<xsl:apply-templates select="//Columns/Column"/>
</tr>
<xsl:apply-templates select="//row"/>
</table>
</xsl:template>
<xsl:template match="Column">
<td align="center" style="font-weight:bold">
<xsl:value-of select="."/>
</td>
</xsl:template>
<xsl:template match="row">
<tr>
<xsl:apply-templates />
</tr>
</xsl:template>
<xsl:template match="item">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
</xsl:stylesheet>
test.aspx.cs:
using System;
using System.Web;
using System.Xml;
using System.Xml.Xsl;
namespace ssm1226.net.xml
{
/// <summary>
/// trans_table 的摘要说明。
/// </summary>
public class trans_table : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string[] arrColumns={"ssm1226-1","ssm1226-2","ssm1226-3","ssm1226-4"};
Response.Clear();
Response.Write(builderTable(arrColumns));
Response.End();
}
private string builderTable(string[] arrColumns)
{
XmlDocument xmldoc=new XmlDocument();
xmldoc.Load(Server.MapPath("csdn0001.xml"));
XmlNode oNode=xmldoc.CreateElement("Columns");
XmlNode oNodeTemp;
for(int i=0;i<arrColumns.Length;i++)
{
oNodeTemp=xmldoc.CreateElement("Column");
oNodeTemp.InnerText=arrColumns[i];
oNode.AppendChild(oNodeTemp);
}
xmldoc.DocumentElement.AppendChild(oNode);
XslTransform xslTrans=new XslTransform();
xslTrans.Load(Server.MapPath("csdn0001.xsl"));
XmlReader xr=xslTrans.Transform(xmldoc,null);
xr.MoveToContent();
return xr.ReadOuterXml();
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
csdn0001.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Content>
<row>
<item value="a1" id="1">aa1</item>
<item value="a2" id="2">aa2</item>
<item value="a3" id="3">aa3</item>
</row>
<row>
<item value="b1" id="1">bb1</item>
<item value="b2" id="2">bb2</item>
<item value="b3" id="3">bb3</item>
</row>
</Content>
csdn0001.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table border="1">
<tr>
<xsl:apply-templates select="//Columns/Column"/>
</tr>
<xsl:apply-templates select="//row"/>
</table>
</xsl:template>
<xsl:template match="Column">
<td align="center" style="font-weight:bold">
<xsl:value-of select="."/>
</td>
</xsl:template>
<xsl:template match="row">
<tr>
<xsl:apply-templates />
</tr>
</xsl:template>
<xsl:template match="item">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
</xsl:stylesheet>