我将如何更改
<CHAPT>
<CHAPTNO>1.1</CHAPTNO>
<SUBJ>Introduction</SUBJ>
<P>foo text</P>
<P>foo text</P> .. and so on
</CHAPT>
对此:
<p class="chapheader"><span class="chapnumbers">1.1 </span>Introduction</p>
<P>foo text</P>
<P>foo text</P>
但是 ,只有<CHAPTNO>
直接位于<SUBJ>
之前...因为XML中还有其他<SUBJ>
关注<CHAPTNO>
,我不希望那些独立的主题行格式化为章节标题。
我是XSLT的新手,并且卡在我的第二个模板上。
答案 0 :(得分:1)
试试这个。这是我的示例XML(我为测试添加了一个根元素):
<root>
<CHAPT>
<CHAPTNO>1.1</CHAPTNO>
<SUBJ>Introduction1111</SUBJ>
<P>foo text</P>
<P>foo text</P>
</CHAPT>
<CHAPT>
<SUBJ>Introduction2222</SUBJ>
<P>foo text</P>
<P>foo text</P>
</CHAPT>
<CHAPT>
<CHAPTNO>3333</CHAPTNO>
<SUBJ>Introduction3333</SUBJ>
<P>foo text</P>
<P>foo text</P>
</CHAPT>
</root>
XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" indent="no"/>
<xsl:template match="/">
<xsl:for-each select="root/CHAPT">
<xsl:if test="SUBJ[count(../CHAPTNO)=1]">
<p class="chapheader">
<span class="chapnumbers"><xsl:value-of select="CHAPTNO"/></span>
<xsl:value-of select="SUBJ"/>
</p>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
结果输出:
<p class="chapheader"><span class="chapnumbers">1.1</span>Introduction1111</p>
<p class="chapheader"><span class="chapnumbers">3333</span>Introduction3333</p>