动态操作XML+XSL 生成HTML

原理:

1.Xml用来定义数据,

<狼人>

  <动作>嚎叫</动作>

  <参照物>满月<参照物>

</狼人>

2.XSLT用来当做页面模板显示数据 

<xsl:stylesheet version="1.0">

  <xsl:output method="html"/>

<html>

<head>

<title>生化危机</title>

</head>

<body>

狼人:<xsl:value-of select="狼人/动作"/> <!-- 从Xml节点取Node的值:嚎叫-->

</body>

<html>

</xsl:stylesheet>

 

3.动态操作XML原理:  将Xml文件加载到 XmlDocument内,再遍历操作节点,然后将 Document保存在 MemoryStream 内,用 XmlReader 读取即可。

XmlDocument xmlDoc=  *.Load(xmlFilePath);  //xml文件加载

node=xmlDoc.selectSingleNode("No")    //按节点 顺序访问

node.innerText="lalala"; //操作节点值

MemoryStream xmlStream=new MemoryStream(); //创建用来暂存更改后的Xml文件的内存流

xmlDoc.Save(xmlStream); //将更改后文件保存到内存流

xmlStream.Seek(0,SeekOrigin.Begin); //将内存流指针指向第一位,使xmlReader 可以正确从头开始读取

XmlReader xmlReader=XmlReader.Create(xmlStream); //用XmlReader读取

//Xsl操作

XmlReader xslReader=XmlReader.Create("XslFilePath"); //读取XSL也用 XmlReader

 

//XmlTextWriter 用于将生成后的html写入对象(MemoryStream)

MemoryStream writerStream=new  MemoryStream(); //用于暂存生成的html的内存流

XmlTextWriter xmlWriter=new (writerStream,Encoding.xx); //用于将生成的html写入内存流

XslCompiledTransform xslTransform=new XslCompiledTransform(); //用于将XSL和XML XXOO

xslTransform.Load(xslReader); //先加载XSL

xslTransform.Transform(xmlReader,xmlWriter); //XSL和XML XXOO 后将通过XmlTextWriter 写入内存流 writerStream

StreamReader sr=new (writerStream); //用于从writerStream中读取数据

writerStream.Seek(0,SeekOrigin.Begin); //将内存流的查找指针放置第一位

string htmlContent=sr.ReadToEnd(); //读取内存中的html

参考

XSL基础教程

http://www.ibm.com/developerworks/cn/xml/ccidnet/xslfund/index1.html

http://www.w3school.com.cn/xsl/el_value-of.asp

posted @ 2011-05-25 20:51  失落小羊  阅读(780)  评论(1编辑  收藏  举报