Heim  >  Artikel  >  Backend-Entwicklung  >  Beispielcode zum Konvertieren von XML in HTML mithilfe von XLST

Beispielcode zum Konvertieren von XML in HTML mithilfe von XLST

黄舟
黄舟Original
2017-03-20 17:01:172192Durchsuche

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>




Das obige ist der detaillierte Inhalt vonBeispielcode zum Konvertieren von XML in HTML mithilfe von XLST. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn