目前我正致力于使用XSLT将QTI转换为XHTML。
我有一个可能有一些html标签的标签。目前在以下示例中,我有以下QTI xml
<?xml version="1.0" encoding="utf-8"?>
<assessmentItem xsi:schemaLocation="http://www.imsglobal.org/xsd/imsqti_v2p1 http://www.imsglobal.org/xsd/imsqti_v2p1.xsd" identifier="choice" title="Item Title will come here" adaptive="false" timeDependent="false" xmlns="http://www.imsglobal.org/xsd/imsqti_v2p1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<responseDeclaration identifier="RESPONSE" cardinality="single" baseType="identifier">
<correctResponse>
<value>D</value>
</correctResponse>
</responseDeclaration>
<outcomeDeclaration identifier="SCORE" cardinality="single" baseType="integer">
<defaultValue>
<value>0</value>
</defaultValue>
</outcomeDeclaration>
<itemBody>
<div id="item">
<choiceInteraction responseIdentifier="RESPONSE" shuffle="false" maxChoices="1">
<prompt>Question text appears here?</prompt>
<simpleChoice identifier="A">
<img src="a.gif" height="75px" width="75px" id="img0" alt=""></img>
</simpleChoice>
<simpleChoice identifier="B">
<img src="b.gif" height="75px" width="75px" id="img1" alt=""></img>
</simpleChoice>
<simpleChoice identifier="C">
<img src="c.gif" height="75px" width="75px" id="img2" alt=""></img>
</simpleChoice>
<simpleChoice identifier="D">
<img src="d.gif" height="75px" width="75px" id="img3" alt=""></img>
</simpleChoice>
<simpleChoice identifier="E">
<img src="e.gif" height="75px" width="75px" id="img4" alt=""></img>
</simpleChoice>
</choiceInteraction>
</div>
</itemBody>
<responseProcessing template="http://www.imsglobal.org/question/qti_v2p1/rptemplates/match_correct" />
</assessmentItem>
我想检查simpleChoice标记是否有任何img标记作为子节点,然后我想将样式添加到<div class='content'>
输出标记,如下所示,如果simpleChoice标记没有img标记作为子节点我想将样式属性跳到<div class='content'>
输出标记。
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div id="wrapper">
<div id="item">
<div id="qtn">Question text appears here?</div>
<div id="inx">
<div id="ih1">
<div id="mc1">
<label id="l1">A.</label>
<div class="content" style='vertical-align:middle;display:inline-block'>
<img src="a.gif" height="75px" width="75px" id="img0" alt=""/>
</div>
</div>
</div>
<div id="ih2">
<div id="mc2">
<label id="l2">B.</label>
<div class="content" style='vertical-align:middle;display:inline-block'>
<img src="b.gif" height="75px" width="75px" id="img1" alt=""/>
</div>
</div>
</div>
<div id="ih3">
<div id="mc3">
<label id="l3">C.</label>
<div class="content" style='vertical-align:middle;display:inline-block'>
<img src="c.gif" height="75px" width="75px" id="img2" alt=""/>
</div>
</div>
</div>
<div id="ih4">
<div id="mc4">
<label id="l4">D.</label>
<div class="content" style='vertical-align:middle;display:inline-block'>
<img src="d.gif" height="75px" width="75px" id="img3" alt=""/>
</div>
</div>
</div>
<div id="ih5">
<div id="mc5">
<label id="l5">E.</label>
<div class="content" style='vertical-align:middle;display:inline-block'>
<img src="e.gif" height="75px" width="75px" id="img4" alt=""/>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
答案 0 :(得分:1)
匹配simpleChoice元素时,请尝试在xpath中包含过滤器。例如,
simpleChoice <!-- matches a simpleChoice element -->
simpleChoice[img] <!-- matches a simpleChoice element with a child img element -->
您可以将它与模板一起使用,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="/">
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
((etc, etc, etc, skipping a bit here for brevity; jumping right
into the simpleChoice items))
<xsl:apply-templates select="//simpleChoice" />
</body>
</html>
</xsl:template>
<!-- This matches all other simpleChoice items that are not matched above. -->
<xsl:template match="simpleChoice">
<div class="content">
<xsl:value-of select="@identifier" />
</div>
</xsl:template>
<!-- This matches simpleChoice items with an img as a direct child -->
<xsl:template match="simpleChoice[img]">
<div class="content" style="your style goes here">
<xsl:value-of select="@identifier" />
</div>
</xsl:template>
</xsl:stylesheet>
要捕获可能嵌套在simpleChoice
块下的图像,您需要搜索后代轴。这是一个非常简单的修改。在我的示例中,更改此行:
<xsl:template match="simpleChoice[img]">
改为:
<xsl:template match="simpleChoice[descendant::img]">
Here is an updated example。您可以阅读有关xpath轴here的更多信息。
答案 1 :(得分:1)
你可以在文字结果元素中使用<xsl:attribute>
,只要你在添加任何子元素之前这样做,所以像这样的东西可以工作:
<xsl:template match="simpleChoice">
<div class="content">
<xsl:if test="img">
<xsl:attribute name="style">vertical-align:middle;display:inline-block</xsl:attribute>
</xsl:if>
<!-- rest of the div content goes here -->
</div>
</xsl:template>