以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  请教:初次接触XSL,照猫画虎做了一个,总是出错,不知问题出在哪里?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=65524)


--  作者:xml-linguist
--  发布时间:8/7/2008 10:50:00 AM

--  请教:初次接触XSL,照猫画虎做了一个,总是出错,不知问题出在哪里?
首先看看xml文件:

<choices>
 <item>
  <mappingSerialNo check="">01.      <mark>A.</mark>went<mark>B.</mark>been<mark>C.</mark>done<mark>D.</mark>gone      <resources>
    <explanation/>
    <dicLink/>
    <gramLink/>
   </resources>
  </mappingSerialNo>
  <br/>
  <mappingSerialNo check="">02.      <mark>A.</mark>my<mark>B.</mark>mine<mark>C.</mark>I<mark>D.</mark>ours
       <resources>
    <explanation/>
    <dicLink/>
    <gramLink/>
   </resources>
  </mappingSerialNo>
  <br/>
...
...
...
  <mappingSerialNo check="">15.      <mark>A.</mark>brave<mark>B.</mark>kind enough<mark>C.</mark>happy<mark>D.</mark>honest
       <resources>
    <explanation/>
    <dicLink/>
    <gramLink/>
   </resources>
  </mappingSerialNo>
  <br/>
  <resources>
   <explanation/>
   <dicLink/>
   <gramLink/>
  </resources>
 </item>
</choices>
===================================

其中,mappingSerialNo元素的DTD声明是混合型的,即包含数据有包含元素<mark>。

下面是我学作的xsl:

<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="choices/item">
<xsl:for-each select="mappingSerialNo"/>
<html>
   <p>
   <xsl:value-of select="mappingSerialNo"/>
   <xsl:value-of select="mark"/>
   </p>
 <xsl:apply-imports/>
</html>
</xsl:template>

<xsl:template match="mappingSerialNo">
<xsl:for-each select="mark"/>
  <html>
   <p>
   <xsl:value-of select="mark"/>
   </p>
  </html>
</xsl:template>

</xsl:stylesheet>
============================
结果显示的格式是这样的:

01. A.wentB.beenC.doneD.gone
A.
A.
A.
A.
A.
A.
A.
A.
A.
A.
A.
A.
A.
A.
A.

只有第一行显示正确,以后的各行都缺少数据。怎么办?


--  作者:xml-linguist
--  发布时间:8/7/2008 10:52:00 AM

--  
恳请各位帮忙!

--  作者:xml-linguist
--  发布时间:8/7/2008 10:57:00 AM

--  
我在不断的修改中。如果正确了,我会把正确的格式给大家看看。从错误中学习,学了永远不会忘记。

--  作者:xml-linguist
--  发布时间:8/7/2008 11:03:00 AM

--  
修改xsl:

<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="choices/item">
<xsl:for-each select="mappingSerialNo"/>
<html>
   <p>
   <xsl:value-of select="mappingSerialNo"/>
   <xsl:value-of select="mark"/>
   </p>
 <xsl:apply-imports/>
</html>
</xsl:template>

<xsl:template match="mappingSerialNo">
<xsl:for-each select="."/>
<xsl:for-each select="mark"/>
  <html>
   <p>
   <xsl:value-of select="."/>
   <xsl:value-of select="mark"/>
   </p>
  </html>
</xsl:template>

</xsl:stylesheet>

=========================
添加的内容:

1. <xsl:template match="mappingSerialNo">
<xsl:for-each select="."/>
<xsl:for-each select="mark"/>
这一部分的
<xsl:for-each select="."/>
2. <p>
   <xsl:value-of select="."/>
   <xsl:value-of select="mark"/>
   </p>
这一部分的
<xsl:value-of select="."/>
===================================


--  作者:xml-linguist
--  发布时间:8/7/2008 11:06:00 AM

--  
显示结果:(改进了很多,但是还是不完全正确)

01. A.wentB.beenC.doneD.gone

01. A.wentB.beenC.doneD.gone A.

02. A.myB.mineC.ID.ours A.

03. A.beenB.been goingC.goneD.went A.

04. A.had talked toB.had seenC.had been withD.had visited A.

05. A.famousB.forgottenC.strangeD.unknown A.

06. A.heB.himC.themD.their A.

07. A.factB.the concertC.musicD.the gifts A.

08. A.gaveB.madeC.surpriseD.got A.

09. A.prettyB.crowdedC.noisyD.wondernful A.

10. A.silenceB.fastC.quietD.loud A.

11. A.surprisingB.surprisedC.surpriseD.being surprised A.

12. A.to laughB.shoutingC.to talkD.singing A.

13. A.in the front ofB.at the back ofC.at the bottomD.in front of A.

14. A.eagerB.wantedC.likeD.anxious A.

15. A.braveB.kind enoughC.happyD.honest A.

============================
问题:
01 序号01重复了。
02 从第二个01开始,每个序号后面多加了一个A

============================
有感觉了。可以继续该下去了。


--  作者:xml-linguist
--  发布时间:8/7/2008 11:52:00 AM

--  
在修改:
先看以下内容

<xsl:template match="choices/item">
<xsl:for-each select="mappingSerialNo"/>
<html>
   <p>
   <xsl:value-of select="mappingSerialNo"/>
   <xsl:value-of select="mark"/>
   </p>
<xsl:apply-imports/>
</html>
</xsl:template>

从中去掉

   <p>
   <xsl:value-of select="mappingSerialNo"/>
   <xsl:value-of select="mark"/>
   </p>

显示中的第一行 01没有了:

01. A.wentB.beenC.doneD.gone A.

02. A.myB.mineC.ID.ours A.

03. A.beenB.been goingC.goneD.went A.

04. A.had talked toB.had seenC.had been withD.had visited A.

......
15. A.braveB.kind enoughC.happyD.honest A.

但是,每一行后面还是多了一个 A。


--  作者:xml-linguist
--  发布时间:8/7/2008 11:55:00 AM

--  
再从
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="choices/item">
<xsl:for-each select="mappingSerialNo"/>
中去掉
<xsl:for-each select="mappingSerialNo"/>

显示格式没有变化,还是每行后面多一个A。


--  作者:xml-linguist
--  发布时间:8/7/2008 11:59:00 AM

--  
再从<xsl:template match="mappingSerialNo">下面去掉

<xsl:for-each select="."/>
或同时去掉
<xsl:for-each select="."/>
<xsl:for-each select="mark"/>

显示结果没有变化。

搞不懂了!!!!!!


--  作者:xml-linguist
--  发布时间:8/7/2008 12:08:00 PM

--  

<xsl:template match="mappingSerialNo">
  <html>
   <p>
   <xsl:value-of select="."/>
   <xsl:value-of select="mark"/>
   </p>
  </html>
</xsl:template>
中去掉
   <xsl:value-of select="mark"/>
合适了!!!!!

==============
01. A.wentB.beenC.doneD.gone

02. A.myB.mineC.ID.ours

......

15. A.braveB.kind enoughC.happyD.honest


--  作者:xml-linguist
--  发布时间:8/7/2008 12:10:00 PM

--  
最终的xsl为:
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="choices/item">
<html>
 <xsl:apply-imports/>
</html>
</xsl:template>

<xsl:template match="mappingSerialNo">
  <html>
   <p>
   <xsl:value-of select="."/>
   </p>
  </html>
</xsl:template>

</xsl:stylesheet>

==================
这个<xsl:value-of select="."/>!!!!!功能如此强大!不仅获取了本结点的数据,而且还能获取子元素(mark)结点的数据!!!!!


--  作者:Qr
--  发布时间:8/7/2008 3:20:00 PM

--  
呵呵,整个过程都贴出来了。
--  作者:xml-linguist
--  发布时间:8/7/2008 4:38:00 PM

--  
今天感觉不错。
以上是一个ClozeTest体型的xml文件;感觉做xml没有什么问题,但是读取数据比较难,一直没有做。其实我做的xml文件包含了mutipleChoice; readingComprehension; fillInBlank以及书面回答问题等各种体型,适合于中、英文所有试题类型(现在的问题是数学化学物理生物部分的符号问题还没有解决)。但是我没有能力将做一个适合于综合文件的、合理xsl,暂时只能一个部分一个部分拆开来做,等每个部分完成了再想办法合为一体。
做了ClozeTest题型的xml和xsl之后,豁然开朗,今天有把readingComprehension的相关文件也做出来了。
有问题要请教Qr!请多多关照!
--  作者:xml-linguist
--  发布时间:8/9/2008 10:43:00 AM

--  
今天又看了一遍:
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="choices/item">
<html>
<xsl:apply-imports/>
</html>
</xsl:template>

<xsl:template match="mappingSerialNo">
  <html>
   <p>
   <xsl:value-of select="."/>
   </p>
  </html>
</xsl:template>

</xsl:stylesheet>

这中间有个错误:
第五行的<xsl:apply-imports/>是明显的输入错误,应该是<xsl:apply-templates/>。我根本不知道有<xsl:apply-imports/>这个元素,但是为什么能正确显示呢?我以为是个多余的元素,把它删除以后,IE显示为一片空白。在把它更改为<xsl:apply-templates/>,显示的格式也是正确的。

难道<xsl:apply-imports />和<xsl:apply-templates/>两个元素都可以用在xsl中?


--  作者:xml-linguist
--  发布时间:8/9/2008 10:51:00 AM

--  
经过反复试验,这两个东西还正的具有一样的功能。
<xsl:apply-imports/>   <xsl:apply-templates/>

以下是我的实验过程:
1. 去掉<xsl:apply-imports/>
    IE显示:一片空白
2. 随意改动一下:xsl:apply-import/>
    IE显示:
    无法显示 XML 页。
    使用 XSL 样式表无法查看 XML 输入。请更正错误然后单击 刷新按钮,或以后重试。
    --------------------------------------------------------------------------------
    此处不能使用关键字 xsl:apply-import。
3. 更改为:<xsl:apply-templates/>
    IE显示格式正确。

==============================
为什么?



--  作者:Qr
--  发布时间:8/9/2008 1:12:00 PM

--  
<xsl:apply-imports />和<xsl:apply-templates/>两个都XSL中的可用元素。
前者为导入外部XSL,后者运用模板到当前元素或节点。
从代码看,用后者才是正确的。
为什么用<xsl:apply-imports />也行呢,我估计是没有参数,<xsl:apply-imports />会将隐含的模板导入,这个隐含的模板是自带的。
--  作者:xml-linguist
--  发布时间:8/9/2008 1:23:00 PM

--  
谢谢Qr!
真的是意外的收获。我看xsl现在涉及到的仅仅是<xsl:apply-templates>, <xsl:template>, <xsl:for-each>, <xsl:value of>这么几个元素。
继续学,把<xsl:imports>也要用一用。

===============================
说来也真是神差鬼使!我打汉字出错的可能性很大。打英语一般没有问题,看着文本直接敲打键盘就行了。难道是神灵在帮助我,居然在这么一个重要位置把这么重要的一个元素templates误敲成了另外一个重要的元素imports,而这个元素照样还能发挥总用!!!!

上天助我呀!!!!


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
93.750ms