什么是XML?
XML是The Extensible Markup Language(可扩展标识语言)的简写。目前推荐遵循的是W3C组织于2000年10月6日发布的XML1.0版本,参考(www.w3.org/TR/2000/REC-XML-20001006)。和HTML一样,XML同样来源于SGML,但XML是一种能定义其他语言的语。XML最初设计的目的是弥补HTML的不足,以强大的扩展性满足网络信息发布的需要,后来逐渐用于网络数据的转换和描述。
目前在网站信息传递中常用的RSS就是典型的XML应用。
本来还不想学xml和xsl,今天终于还是被逼着学了,原因就是今天碰到这样一个问题。
有个XMLFile.xml的文件,代码如下:
<book>
<bookRecord>
<name>阿会楠</name>
<content>sosuo8.com</content>
</bookRecord>
</book>
我希望通过XmlDataSource和GridView控件绑定并且显示数据,结果跳出这样的错误:
“/xml操纵”应用程序中的服务器错误。
ID 为“GridView1”的 GridView 的数据源没有任何可用来
生成列的属性或特性。请确保您的数据源有内容。
查了下原因:在将表格数据绑定控件(GridView)绑定到XmlDataSource控件时,该控件仅呈现XML层次结构的第一级。XmlDataSource控件将第一级节点的属性公开为数据表中的等效列。而我是以元素的形式保存内容到XML文件的。
所以我们要把XMLFile.xml里面的代码转换成:
<book>
<bookRecord name="a" content="a"></bookRecord>
<bookRecord name="b" content="b"></bookRecord>
</book>
我知道可以通过使用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="book">
<!--
This is an XSLT template file. Fill in this area with the
XSL elements which will transform your XML to XHTML.
-->
<xsl:element name="book">
<xsl:for-each select="..//bookRecord">
<xsl:element name="bookRecord">
<xsl:attribute name="name">
<xsl:value-of select="name"/>
</xsl:attribute>
<xsl:attribute name="content">
<xsl:value-of select="content"/>
</xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
在asp.net中使用“System.Xml.Xsl”命名空间提供的“XslTransform”类,把XMLFile.xml 通过XSLTFile.xsl转换成XMLFile2.xml,其实现代码如下:
//加载原文件
XmlDocument mydoc = new XmlDocument();
mydoc.Load(Server.MapPath("../XMLFile.xml"));
//初始化转换类
XslTransform trans = new XslTransform();
//加载转换文件
trans.Load(Server.MapPath("../XSLTFile.xsl"));
//实行转换
trans.Transform(Server.MapPath("../XMLFile.xml"), Server.MapPath("../XMLFile2.xml"));
结果:
<?xml version="1.0" encoding="utf-8"?><book><bookRecord name="a" content="a"></bookRecord><bookRecord name="b" content="b"></bookRecord></book>
真奇怪,转换后没有换行,也不知道是啥原因。