用xlst将xml转换html

xml文件

<?xml version="1.0" encoding="utf-8" ?>

<Paper Title="小寒考试系统" Name="大三历史期末考试" StartTime="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="第三章" 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>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/Transform"
  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" language="C#">
    <![CDATA[
    public static string ChangeTextBox(string content)
    {
              // Define a regular expression for repeated words.
        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.Substring(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>
        <div class="Head">
          <div class="Name"><xsl:value-of select="@Name"/></div>
          <div 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"/>
        </div>
        </div>
        <xsl:apply-templates select="Questions"/>
      </body>
    </html>
  </xsl:template>
 
  <xsl:template match="Questions">
    <div 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>
    </div>
    <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">
      <div class="DanXuan">
        <div class="Content">
          <xsl:number format="1."/>
          <xsl:value-of select="Content"/>
        </div>
        <div 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>
        </div>
      </div>
  </xsl:template>

  <xsl:template match="DuoXuan">
    <div class="DuoXuan">
      <div class="Content">
        <xsl:number format="1."/>
        <xsl:value-of select="Content"/>
      </div>
      <div 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>
      </div>
    </div>
  </xsl:template>

  <xsl:template match="PanDuan">
    <div class="PanDuan" style="width:300px">
      <div class="Content" style="float:left;width:70%">
        <xsl:number format="1."/>
        <xsl:value-of select="Content"/>
      </div>
      <div class="Choices" style="float:right;width:25%">
        <input name="{@Id}" type="radio" value="1"/>Y
        <input name="{@Id}" type="radio" value="0" />N
      </div>
    </div>
  </xsl:template>

  <xsl:template match="TianKong">
    <div class="TianKong">
      <xsl:number format="1."/>
      <xsl:value-of select="rules:ChangeTextBox(string(Content))" disable-output-escaping="yes"/>
    </div>
  </xsl:template>
  <xsl:template match="JianDa">
    <div class="JianDa">
      <div class="Content">
        <xsl:number format="1."/>
        <xsl:value-of select="Content"/>
      </div>
      <div class="Input">
        <textarea name="{@Id}" cols="70" rows="8"></textarea>
      </div>
    </div>
  </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 >



转载于:https://www.cnblogs.com/xhan/archive/2008/01/29/1057939.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值