简单用xslt样式表解析xml文件。
此例只用到了System.Xml.XPath.XPathDocument、System.Xml.Xsl.XslTransform两个类。
建一个类库工程,在里面对服务器控件进行定义,简单定义代码如下:
public class UserNavigator : System.Web.UI.Control
{
private string strTransformFilePath;//用于转换xml文件的xslt文件路径
private string strSourceFilePath;//待转换的xml文件路径
public string TransfromFilePath
{
set { strTransformFilePath = value; }
get { return strTransformFilePath; }
}
public string SourceFilePath
{
set { strSourceFilePath = value; }
get { return strSourceFilePath; }
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
}
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
XPathDocument xPathDoc = new XPathDocument(Context.Server.MapPath(SourceFilePath));
XslTransform xslTran = new XslTransform();
xslTran.Load(Context.Server.MapPath(TransfromFilePath));
xslTran.Transform(xPathDoc, null, writer);
}
}
以上代码实现了一个例用xslt转化xml文件的类,为了要生成服务器控件,此类继承自System.Web.UI.Control类。这样一个简单转化xml的控件就完成了。
下面来测试这个控件,新建一个网站工程,建立xml各xslt文件,下面为待转化的xml文件NavMenu.xml:
<?xml version="1.0" encoding="utf-8" ?>
<NavMenu title ="Navigator">
<Item title="Item1">
<ItemLink title="Item1_link" link="link1.aspx"></ItemLink>
</Item>
<Item title="Item2">
<ItemLink title="Item2_link" link="link2.aspx"></ItemLink>
</Item>
</NavMenu>
接着定义xslt文件XSLTNav.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="/NavMenu">
<table width="200px" border="0" cellspacing="0" cellpadding="0">
<tr>
<td >
<xsl:value-of select="@title"/>
</td>
</tr>
<xsl:for-each select="Item">
<tr>
<td>
<xsl:value-of select="@title"/>
</td>
</tr>
<xsl:for-each select="ItemLink">
<tr>
<td>
<a>
<xsl:attribute name="href">
<xsl:value-of select="@link"/>
</xsl:attribute>
<xsl:value-of select="@title"/>
</a>
</td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
新建一个aspx文件,生成上面建的类库工程,在网站工程中左边工具中会出现上面建的控件(类库与网站在一个解决方案中),将此用户控件拖到网页中,在属性窗口中会看到自己定义的两个属性,将上面的xml和xslt文件路径分别指定给这两个属性,保存在浏览器中浏览查看效果。