使用xlst将xml转换html的示例代码

xml文件

<?xml version=1.0 encoding=utf-8 ?>
<Paper Title=小寒考试系统 Name=大三历史期末考试 Start
Time
=2008-1-28 09:00 Time=120 scoreValue=100 score=0>
  
  <Student Name=小寒 Id=041124096/>
 
  <Questions Title=单选题 scoreValue=20 
Count
=1 score=0>
    <DanXuan Id=1 Subject=历史 Chapter=第三章 D
if
ficulty=1  scoreValue=20 score=0>
      <Content>诸葛亮姓什么?</Content>
      <Choices>
        <Choice 
Key
=1>诸</Choice>
        <Choice Key=2>诸葛</Choice>
        <Choice Key=3>诸葛亮</Choice>
        <Choice Key=4>亮</Choice>
      </Choices>
      <Answer>2</Answer>
      <StudentAnswer></StudentAnswer>
    </DanXuan>
  </Questions>
  <Questions Title=多选题 scoreValue=20 Count=1 score=0>
    <DuoXuan Id=2 Subject=历史 Chapter=第三章 Difficulty=1  scoreValue=20 score=0>
      <Content>三国是指那三国?</Content>
      <Choices>
        <Choice Key=1>魏国</Choice>
        <Choice Key=2>吴国</Choice>
        <Choice Key=3>辽国</Choice>
        <Choice Key=4>蜀国</Choice>
      </Choices>
      <Answer>1,2,4</Answer>
      <StudentAnswer></StudentAnswer>
    </DuoXuan>
  </Questions>
  
  <Questions Title=判断题 scoreValue=20 Count=1 score=0>
    <PanDuan Id=3 Subject=历史 Chapter=第三章 Difficulty=1  scoreValue=20 score=0>
      <Content>刘备建立了蜀国?</Content>
      <Choices>
        <Choice Key=0>0</Choice>
        <Choice Key=1>1</Choice>
      </Choices>
      <Answer>1</Answer>
      <StudentAnswer></StudentAnswer>
    </PanDuan>
  </Questions>
  
  
  <Questions Title=填空题 scoreValue=20 Count=1 score=0>
    <TianKong Id=4 Subject=历史 Chapter=第三章 Difficulty=1  scoreValue=20 score=0>
      <Content> <![CDATA[
      三国里的五虎上将是指关羽,$_4.1_$,$_4.2_$,$_4.3_$,赵云。
       ]]>
    </Content>
      <Answers>
        <Answer Key=1>张飞</Answer>
        <Answer Key=2>魏延</Answer>
        <Answer Key=3>马超</Answer>
      </Answers>
      <StudentAnswers>
        <StudentAnswer Key=1></StudentAnswer>
        <StudentAnswer Key=2></StudentAnswer>
        <StudentAnswer Key=3></StudentAnswer>
      </StudentAnswers>
    </TianKong>
  </Questions>
  <Questions Title=
简答题
 scoreValue=20 Count=1 score=0>
    <JianDa Id=5 Subject=历史 Chapter=第三章 Difficulty=1  scoreValue=20 score=0>
      <Content>为什么诸葛亮没能统一三国?</Content>
      <Answer>因为魏国统一了三国。</Answer>
      <StudentAnswer></StudentAnswer>
    </JianDa>
  </Questions>
</Paper>


xslt文件

<?xml version=1.0 encoding=UTF-8 ?>
<xsl:stylesheet version=1.0 
  xmlns:xsl=http://www.w3.org/1999/XSL/Trans
for
m
  xmlns:msxsl=urn:schemas-microsoft-com:xslt
  xmlns:rules=http://www.netguy.cn/xslt
   exclude-result-prefixes=rules msxsl>
  
  <xsl:output method=html/>
  <msxsl:script implements-prefix=rules 
lang
uage=
C#
>
    <![CDATA[
    public 
static
 
string
 ChangeTextBox(string content)
    {
              // Define a regular expression for repeated w
ord
s.
        Regex rx = 
new
 Regex(@\$_\S\S\S_\$,
          RegexOptions.Compiled | RegexOptions.IgnoreCase);
        // Find matches.
        MatchCollection matches = rx.Matches(content);
        // Report on 
each
 match.
        
foreach
 (Match match in matches)
        {
            string word = match.Value;
           
            content=content.Replace(word,<input name=\+word.
Substr
ing(2,word.Length-4)+\ type=\text\>);
        }
        
return
 content;
        
    }
    ]]>
  </msxsl:script>
  <xsl:template match=Paper>
    <html xmlns=http://www.w3.org/1999/xhtml >
      <
head
>
        <title>
          <xsl:value-of select=@Title/>
        </title>
      </head>
      <body>
        <p class=Head>
          <p class=Name><xsl:value-of select=@Name/></p>
          <p class=Info>
            姓名:<xsl:value-of select=Student/@Name/>
            学号:<xsl:value-of select=Student/@Id/>
            开考时间:<xsl:value-of select=@StartTime/> 
            时间:<xsl:value-of select=@Time/> 
            总分:<xsl:value-of select=@scoreValue/>
        </p>
        </p>
        <xsl:apply-templates select=Questions/>
      </body>
    </html>
  </xsl:template>
  
  <xsl:template match=Questions>
    <p class=Title>
      <xsl:number format=I./>
      <xsl:value-of select=@Title/>
      <xsl:text>。(共</xsl:text>
     <xsl:value-of select=@Count/>
      <xsl:text>题,</xsl:text>
      <xsl:value-of select=@scoreValue/>
      <xsl:text>分)</xsl:text>
    </p>
    <xsl:apply-templates select=DanXuan/>
    <xsl:apply-templates select=DuoXuan/>
    <xsl:apply-templates select=PanDuan/>
    <xsl:apply-templates select=TianKong/>
    <xsl:apply-templates select=JianDa/>
  </xsl:template>
  
  
  <xsl:template match=DanXuan>
      <p class=DanXuan>
        <p class=Content>
          <xsl:number format=1./>
          <xsl:value-of select=Content/>
        </p>
        <p class=Choices>
          <ul>
            <xsl:for-each select=Choices/Choice>
              <li>
                <xsl:number format=A./>
                <input name={http://www.cnblogs.com/@Id} type=radio value={@Key}/>
                <xsl:value-of select=./>
              </li>
            </xsl:for-each>
          </ul>
        </p>
      </p>
  </xsl:template>
  <xsl:template match=DuoXuan>
    <p class=DuoXuan>
      <p class=Content>
        <xsl:number format=1./>
        <xsl:value-of select=Content/>
      </p>
      <p class=Choices>
        <ul>
          <xsl:for-each select=Choices/Choice>
            <li>
              <xsl:number format=A./>
              <input name={http://www.cnblogs.com/@Id} type=checkBox value={@Key}/>
              <xsl:value-of select=./>
            </li>
          </xsl:for-each>
        </ul>
      </p>
    </p>
  </xsl:template>
  <xsl:template match=PanDuan>
    <p class=PanDuan style=
width
:
300
px>
      <p class=Content style=
float
:left
;width:70%>
        <xsl:number format=1./>
        <xsl:value-of select=Content/>
      </p>
      <p class=Choices style=float
:right
;width:25%>
        <input name={@Id} type=radio value=1/>Y
        <input name={@Id} type=radio value=0 />N
      </p>
    </p>
  </xsl:template>
  <xsl:template match=TianKong>
    <p class=TianKong>
      <xsl:number format=1./>
      <xsl:value-of select=rules:ChangeTextBox(string(Content)) disable-output-esc
api
ng=yes/>
    </p>
  </xsl:template>
  <xsl:template match=JianDa>
    <p class=JianDa>
      <p class=Content>
        <xsl:number format=1./>
        <xsl:value-of select=Content/>
      </p>
      <p class=Input>
        <textarea name={@Id} cols=70 rows=8></textarea>
      </p>
    </p>
  </xsl:template>
</xsl:stylesheet>


生成html

<html xmlns=http://www.w3.org/1999/xhtml>
  <head>
    <title>小寒考试系统</title>
  </head>
  <body>
    <div class=Head>
      <div class=Name>大三历史期末考试</div>
      <div class=Info>
            姓名:小寒
            学号:041124096
            开考时间:2008-1-28 09:00 
            时间:120 
            总分:100</div>
    </div>
    <div class=Title xmlns=>I.单选题。(共1题,20分)</div>
    <div class=DanXuan xmlns=>
      <div class=Content>1.诸葛亮姓什么?</div>
      <div class=Choices>
        <ul>
          <li>A.<input name=1 type=radio value=1>诸</li>
          <li>B.<input name=1 type=radio value=2>诸葛</li>
          <li>C.<input name=1 type=radio value=3>诸葛亮</li>
          <li>D.<input name=1 type=radio value=4>亮</li>
        </ul>
      </div>
    </div>
    <div class=Title xmlns=>II.多选题。(共1题,20分)</div>
    <div class=DuoXuan xmlns=>
      <div class=Content>1.三国是指那三国?</div>
      <div class=Choices>
        <ul>
          <li>A.<input name=2 type=checkBox value=1>魏国</li>
          <li>B.<input name=2 type=checkBox value=2>吴国</li>
          <li>C.<input name=2 type=checkBox value=3>辽国</li>
          <li>D.<input name=2 type=checkBox value=4>蜀国</li>
        </ul>
      </div>
    </div>
    <div class=Title xmlns=>III.判断题。(共1题,20分)</div>
    <div class=PanDuan style=width:300px xmlns=>
      <div class=Content style=float:left;width:70%>1.刘备建立了蜀国?</div>
      <div class=Choices style=float:right;width:25%><input name=3 type=radio value=1>Y
        <input name=3 type=radio value=0>N
      </div>
    </div>
    <div class=Title xmlns=>IV.填空题。(共1题,20分)</div>
    <div class=TianKong xmlns=>1. 
      三国里的五虎上将是指关羽,<input name=4.1 type=text>,<input name=4.2 type=text>,<input name=4.3 type=text>,赵云。
       
    </div>
    <div class=Title xmlns=>V.简答题。(共1题,20分)</div>
    <div class=JianDa xmlns=>
      <div class=Content>1.为什么诸葛亮没能统一三国?</div>
      <div class=Input><textarea name=5 cols=70 rows=8></textarea></div>
    </div>
  </body>
</html>




相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念