如何执行两个部分XSLT

时间:2013-01-25 22:03:47

标签: xml xslt

我将如何更改

<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的新手,并且卡在我的第二个模板上。

1 个答案:

答案 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>