以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  [求助]关于xlst  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=83849)


--  作者:eisbear
--  发布时间:3/15/2010 8:57:00 PM

--  [求助]关于xlst
有个xml文件的内容由若干<article>..</article>组成,
<article>
<lem> Rebensaft, der</lem>
<br />
<p><lemfloat>der Rebensaft</lemfloat></p>
<br />
<br />
..
</text>
</article>

<article>....
</article>
输出要求单数位置的<br/>变为<cit>,双数位置的<br/>变为</cit>, 其他内容不变. 请问该如何处理?
我用<xsl:template match="br">
<xsl:value-of select="position()"/>
</xsl:template>,
得到的位置很奇怪,都是偶数. 谢谢大家了。

[此贴子已经被作者于2010-3-15 21:54:14编辑过]

--  作者:Qr
--  发布时间:3/15/2010 9:34:00 PM

--  
也许你的br节点的序号都是偶数也很难说,position()不会作怪
--  作者:eisbear
--  发布时间:3/15/2010 9:38:00 PM

--  
发现了,原来<br/> 被xslt分为 <br> </br>, 所以得到的position()都是偶数,不过还是解决不了上面的问题,
另外一个问题是,如果把相邻的2个<br/>变为1个, 就是把<br/><br/>变成</br>, 请大家出出主意,谢谢了
--  作者:Qr
--  发布时间:3/15/2010 9:48:00 PM

--  
<br/> 被xslt分为 <br> </br>
错,对于XSL来说,<br/> == <br></br>
对于以上问题,你需要了解XPath
--  作者:eisbear
--  发布时间:3/15/2010 9:52:00 PM

--  
qr 说的对,

不过该如何解决上面的问题呢?


--  作者:Qr
--  发布时间:3/15/2010 10:00:00 PM

--  
position()可以给出br的位置,following-sibling::*&preceding-sibling::*可以助你判断相邻节点。
--  作者:eisbear
--  发布时间:3/15/2010 10:20:00 PM

--  
不愧是版主,谢谢了,
我研究研究following-sibling::*&preceding-sibling。

关于<br />的位置,在xml文件里已知<br />的总数是双数,我是想判断它出现的在奇数的位置还是偶数的位置,
比如第一个转换成<cit>
第二个转换成</cit>,
第三个转换成<cit>,
第四个转换成</cit>,
找了半天,还没找到点思路。
请指教。


--  作者:Qr
--  发布时间:3/15/2010 10:47:00 PM

--  
以下是引用eisbear在2010-3-15 22:20:00的发言:
关于<br />的位置,在xml文件里已知<br />的总数是双数,我是想判断它出现的在奇数的位置还是偶数的位置,
比如第一个转换成<cit>
第二个转换成</cit>,
第三个转换成<cit>,
第四个转换成</cit>,
找了半天,还没找到点思路。
  请指教。



你这个需求XSL不好解决,用正则会比较容易。
--  作者:eisbear
--  发布时间:3/15/2010 11:04:00 PM

--  
xslt 能不能实现比如:
如果满足条件则添加 <cit>
如果不满足则添加</cit>
下面测试行不通,错误提示说<cit>要成对出现.
<xslt:choose>
<xslt:when test="条件">
     <cit>
</xslt:when>
<xslt:otherwise>
</cit>
</xslt:otherwise>
</xslt:choose>


--  作者:Qr
--  发布时间:3/16/2010 12:01:00 AM

--  
br之间必须只有一个同级节点,否则XSL比较难实现

<xslt:when test="条件">
     <cit>copy同级节点</cit>
</xslt:when>


--  作者:Qr
--  发布时间:3/16/2010 12:03:00 AM

--  
XML标记要成对出现,9楼的用法是绝对不可能的
--  作者:hexun831012
--  发布时间:3/20/2010 1:31:00 PM

--  
貌似这个DD有两招,一是利用分页的算法,也就是先取模position() mod 2,套上<cit></cit>再输出,二好像有个什么属性可以把&lt;cit&gt;实际输出成<cit>,想不起来了
--  作者:jj_long
--  发布时间:4/30/2010 9:12:00 PM

--  
在XSLT中,输出的元素应该是一个完整的元素,即:有开始标记也有结束标记。

所以不能只输出<cit>,而不输出</cit>。

建议:
如果你使用XSLT将XML转换成HTML,建议在HTML里使用Javascript来处理。


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