以文本方式查看主题

-  中文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=67736)


--  作者:xml-linguist
--  发布时间:9/28/2008 11:38:00 AM

--  [求助]关于顺序问题的xsl(我都有点不知道该怎么问)
xml文件如下:

<paragraph>

<sentence>

<text>When I was ...</text>
<serialNo></serialNo>
<text>about ten years ago</text>
<punctuation>,</punctuation>
<serialNo></serialNo>
<text>happened to ...</text>
<punctuation>.</punctuation>

</sentence>

<sentence>

<serialNo></serialNo>
<text>has never occurred to me whehther it was true or not</text>
<punctuation>,</punctuation>
<text> but it</text>
<serialNo></serialNo>
<punctuation>.</punctuation>

</sentence>

</paragraph>

说明:sentence元素中的子元素<text> <serialNo> <punctuation>可以以任意次序出现任意次数. 其中<text>和<punctuation>包含固定的数据,<serialNo>为编号的空格.

问题:

1. xsl怎么做才能保持一个<sentence>中<text> <serialNo> <punctuation>的值按照原来顺序出现,即:保持第一个<sentenc>中<text/><serialNo/><text/></punctuation><serialNo/><text/></punctuation>的顺序;保持第二个<sentenc>中<serialNo/><text/></punctuation><text/><serialNo/></punctuation>的顺序?

2. 如果想让//serialNo在<sentence>中按照顺序显示为

When I was (01)______ about ten years ago,(02)______happened to ... . (03______ has never occurred to me whehther it was true or not,  but it (04)______.
如何做?

先谢谢了!


[此贴子已经被作者于2008-9-28 13:51:07编辑过]

--  作者:xml-linguist
--  发布时间:9/28/2008 11:57:00 AM

--  
我先后实验过几个格式,按什么顺序写就按什么顺序显示.比如:
   <xsl:value-of select="text"/>
   <xsl:value-of select="serialNo"/>
   <xsl:value-of select="punctuation"/>
先是所有的<text>全部显示,然后所有的<serialNo>,最后是所有的<punctuation>;无法保持原来的顺序.
我还没有能力处理这个问题.只能求助了.
--  作者:Qr
--  发布时间:9/29/2008 10:40:00 AM

--  
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
 <xsl:apply-templates/>
</xsl:template>

<xsl:template match="*">
 <xsl:value-of select="."/>
</xsl:template>

</xsl:stylesheet>
结果:
When I was ... about ten years ago , happened to ... . has never occurred to me whehther it was true or not , but it .


--  作者:xml-linguist
--  发布时间:9/29/2008 11:32:00 AM

--  
Thanks to QR.
Now the problem is, when I further define the element <serialNo>,  I don't know how to  maintain the original order of the three "child" of <sentence>; and I want each <serialNo> element to be  given a number.

--  作者:Qr
--  发布时间:9/29/2008 12:28:00 PM

--  
你要做“完型填空”?给出完整的XML和想要的结果,看看能不能实现。
--  作者:xml-linguist
--  发布时间:9/29/2008 1:26:00 PM

--  
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="questionField.xsl"?>
<!DOCTYPE questionField [
 <!ELEMENT questionField (paragraph+)>
 <!ELEMENT paragraph (role*, sentence+)>
 <!ELEMENT role (#PCDATA)>
 <!ELEMENT sentence (english*, chinese*)>
 <!ELEMENT english (text*, serialNo*, punctuation*)*>
 <!ELEMENT chinese (text*, serialNo*, punctuation*)*>
 <!ELEMENT text (#PCDATA)>
 <!ELEMENT serialNo (#PCDATA)>
 <!ELEMENT punctuation (#PCDATA)>
]>
<questionField>

 <paragraph>

  <role/>

  <sentence>
   <english>
    <text/>
    <serialNo/>
    <text/>
    <punctuation/>
   </english>
   <chinese>
    <text/>
    <serialNo/>
    <punctuation/>
   </chinese>
  </sentence>

  <sentence>
   <english>
    <text/>
    <punctuation/>
    <serialNo/>
    <text/>
    <punctuation/>
   </english>
   <chinese>
    <text/>
    <serialNo/>
    <punctuation/>
   </chinese>
  </sentence>

 </paragraph>

 <paragraph>

  <role/>

  <sentence>
   <english>
    <text/>
    <serialNo/>
    <punctuation/>
   </english>
   <chinese>
    <text/>
    <serialNo/>
    <punctuation/>
   </chinese>
  </sentence>

  <sentence>
   <english>
    <text/>
    <serialNo/>
    <text/>
    <serialNo/>
    <text/>
    <punctuation/>
   </english>
   <chinese>
    <text/>
    <serialNo/>
    <text/>
    <punctuation/>
   </chinese>
  </sentence>

 </paragraph>

<questionField>


--  作者:xml-linguist
--  发布时间:9/29/2008 1:31:00 PM

--  
需要的结果如下:

    When I was (01)______ about ten years ago,(02)______happened to ... . (03)______ has never occurred to me whehther it was true or not,  but it (04)______.

      Then (05)______ everything ... (06) ______ ......


--  作者:xml-linguist
--  发布时间:9/29/2008 1:35:00 PM

--  
至于<sentence>为什么包含<english>和<chinese>两个子元素,是考虑到处理汉语题型。在<english>和<chinese>所包含的子元素中不能没有<punctuation>元素,因为英汉两种语言显示的标点符号不一样。
<role>元素一般情况下为空元素,但是为了方便对有些对话形式的题型中的“角色”或“人物”的数据处理特意添加了这个元素。


--  作者:Qr
--  发布时间:10/6/2008 10:18:00 AM

--  
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="serialNo">
<xsl:value-of select="."/>
<xsl:text>(</xsl:text>
<xsl:value-of select="count(preceding::*/serialNo)+count(preceding-sibling::serialNo)+1"/>
<xsl:text>)____</xsl:text>
</xsl:template>

</xsl:stylesheet>
还是不大明白,反正以上代码运行结果差不多。

When I was ...(1)____about ten years ago,(2)____happened to ....(3)____has never occurred to me whehther it was true or not, but it(4)____.


--  作者:xml-linguist
--  发布时间:10/6/2008 11:17:00 AM

--  
很有启发。
问题还是有一点。感觉沿着这个思路往下走,没错。
知道该从哪里下手了,先钻研一下相关内容再说。
非常感谢。
--  作者:Qr
--  发布时间:10/6/2008 3:42:00 PM

--  
XPath是个好东西,掌握好了写XSL事半功倍。
--  作者:xml-linguist
--  发布时间:10/6/2008 11:21:00 PM

--  
对!
以前看到过count, preceeding等,感觉用不着;实际上是没有吃透。现在看来得好好学习了。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
78.125ms