关于XML和XSL转换成文本的问题,请能人帮助解决一下.

fzpfzpaaa 2007-09-06 05:17:59
现在有以下文件.
XML文件:
<?xml version="1.0"?>
<doc version="1.00"><Info title="test" stime="0" etime="274905"/>
<Sentence speaker="aaa" stime="0" etime="4769"><Word>hello</Word></Sentence>
<Sentence speaker="aaa" stime="4769" etime="7642"><Word>hi</Word></Sentence>
<Sentence speaker="aaa" stime="7642" etime="10865"><Word>hello2</Word></Sentence></doc>

XSL文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="gb2312"/>

<xsl:template match="/doc">
<xsl:for-each select="Sentence">
<xsl:call-template name="Sentence"/>
</xsl:for-each>
</xsl:template>
<xsl:template name="Sentence">
<xsl:if test="string-length(./@speaker) > 0">
<xsl:variable name="name" select="./@speaker"/>
<xsl:if test="position() > 1">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="'○'"/>
<xsl:value-of select="./@speaker"/>
<xsl:value-of select="' '"/>
</xsl:if>
<xsl:if test="starts-with(Word, '<')">
<xsl:text> </xsl:text>
<xsl:value-of select="'    '"/>
</xsl:if>
<xsl:if test="starts-with(Word, '[')">
<xsl:text> </xsl:text>
<xsl:value-of select="'    '"/>
</xsl:if>
<xsl:value-of select="Word"/>
<xsl:if test="starts-with(Word, '<')">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:if test="starts-with(Word, '[')">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:template>

</xsl:stylesheet>

Transform转换后的文本文件如下:
○aaa hello
○aaa hi
○aaa hello2

我想要输出下面的结果:

○aaa hellohihello2
也就是说重复aaa的内容都在一行显示.谁能帮我改一下XSL文件.谢谢了!
...全文
131 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
noremorse 2007-09-07
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" encoding="gb2312"/>
<xsl:template match="/doc">
<xsl:for-each select="Sentence">
<xsl:call-template name="Sentence"/>
</xsl:for-each>
</xsl:template>
<xsl:template name="Sentence">
<xsl:if test="string-length(./@speaker) > 0">
<xsl:variable name="name" select="./@speaker"/>
<xsl:if test="string(./@speaker) != string(preceding-sibling::Sentence[1]/@speaker)">
<xsl:if test="position() > 1">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="'○'"/>
<xsl:value-of select="./@speaker"/>
<xsl:value-of select="' '"/>
</xsl:if>
</xsl:if>
<xsl:if test="starts-with(Word, '<')">
<xsl:text> </xsl:text>
<xsl:value-of select="'    '"/>
</xsl:if>
<xsl:if test="starts-with(Word, '[')">
<xsl:text> </xsl:text>
<xsl:value-of select="'    '"/>
</xsl:if>
<xsl:value-of select="Word"/>
<xsl:if test="starts-with(Word, '<')">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:if test="starts-with(Word, '[')">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
fzpfzpaaa 2007-09-07
  • 打赏
  • 举报
回复
这是二楼修改后的输出文本.
hello○aaa 
hi○aaa 
hello2○aaa 差在哪里呢
孟子E章 2007-09-06
  • 打赏
  • 举报
回复
参考
http://www.stylusstudio.com/xsllist/200408/post70790.html
hejunbin 2007-09-06
  • 打赏
  • 举报
回复
<xsl:template match="/doc">
<xsl:for-each select="Sentence">
<xsl:call-template name="Sentence"/>
<xsl:value-of select="'○'"/>
<xsl:value-of select="./@speaker"/>
<xsl:value-of select="' '"/>
</xsl:for-each>
</xsl:template>
<xsl:template name="Sentence">
<xsl:if test="string-length(./@speaker) > 0">
<xsl:variable name="name" select="./@speaker"/>
<xsl:if test="position() > 1">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:if>
<xsl:if test="starts-with(Word, '<')">
<xsl:text> </xsl:text>
<xsl:value-of select="'    '"/>
</xsl:if>
<xsl:if test="starts-with(Word, '[')">
<xsl:text> </xsl:text>
<xsl:value-of select="'    '"/>
</xsl:if>
<xsl:value-of select="Word"/>
<xsl:if test="starts-with(Word, '<')">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:if test="starts-with(Word, '[')">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:template>

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧