我有另一个查询,我尝试但无法完成... 以下是XML代码 -
<Main>
<Region>
<Division>
<DivName>Abc</DivName>
<Desc>BBB</Desc>
<Info></Info>
</Division>
<Division>
<DivName>Pqr</DivName>
<Desc></Desc>
<Info></Info>
</Division>
<Division>
.
.
.
</Division>
</Region>
</Main>
在Division标签中,DivName是强制性的,即;它会在那里,但Desc和Info是可选的。此处包含Desc,DivName和Info标记的Division标记只能出现一次。所以要显示它,我必须使用for-each。
我还想在这些标签之间换行。直到现在我尝试了一点失败。我想要的HTML输出是
<b>DivName Text</b>
<p>Desc Text, if any</p>
<p>Info Text, if any</p>
<hr/>
<b>DivName Text</b>
<p>Desc Text, if any</p>
<p>Info Text, if any</p>
提前致谢.. 祝你今天愉快 约翰
答案 0 :(得分:0)
这个怎么样:
<xsl:for-each select="Division">
<xsl:if test="position() != 1">
<hr/>
</xsl:if>
<p><xsl:value-of select="DivName" /></p>
<xsl:if test="Desc">
<p><xsl:value-of select="Desc"/></p>
</xsl:if>
<xsl:if test="Info">
<p><xsl:value-of select="Info"/></p>
</xsl:if>
</xsl:for-each>
答案 1 :(得分:0)
这个简单的转换(没有<xsl:for-each>
且没有条件):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="Division[position() >1]">
<hr />
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Division/*[text()]">
<p><xsl:value-of select="."/></p>
</xsl:template>
</xsl:stylesheet>
应用于此XML文档时:
<Main>
<Region>
<Division>
<DivName>Abc</DivName>
<Desc>BBB</Desc>
<Info>More info abour Abc</Info>
</Division>
<Division>
<DivName>Pqr</DivName>
<Desc>Pqr desc.</Desc>
<Info>More info abour Pqr</Info>
</Division>
</Region>
</Main>
生成想要的正确结果:
<p>Abc</p>
<p>BBB</p>
<p>More info abour Abc</p>
<hr/>
<p>Pqr</p>
<p>Pqr desc.</p>
<p>More info abour Pqr</p>
浏览器将其显示为:
ABC
BBB
更多信息abour Abc
PQR
Pqr desc。
更多信息abour Pqr