我給出了XML作爲輸入,我無法控制結構。我需要將XML分解成多個部分並分別處理每個部分。下面是我要處理的文件的一個非常簡化的版本。使用XSLT 2.0將XML分解成零件
我試圖使用XSLT 2.0的分組功能通過使用<breakEle>
標記作爲部分邊界來分解此XML。 <breakEle>
也可以出現在任何級別。我試圖用XSLT 2.0做甚麼可能?我已經成功地使用Muenchian分組來完成XSLT 1.0,但是如果可以的話,我想遠離這一點。
樣品輸入:
<item class="poem">
<div>
<div>
<p>paragraph 1</p>
<breakEle groupNum="1"/>
</div>
<div>
<p>Paragraph in another div.</p>
</div>
<breakEle groupNum="2"/>
<div>
<div>
<h4>header</h4>
<p>1st line</p>
<p>2nd line</p>
<br/>
<p>3rd line</p>
<p>4th line</p>
<page n="100"/>
<p>5th line</p>
</div>
<breakEle groupNum="3"/>
</div>
</div>
</item>
我正在努力工作以:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
exclude-result-prefixes="xs xd"
version="2.0">
<xsl:template match="/">
<newRoot>
<xsl:copy>
<xsl:for-each-group select="*" group-ending-with="breakEle">
<div num="{@groupNum}">
<xsl:copy-of select="current-group()"/>
</div>
</xsl:for-each-group>
</xsl:copy>
</newRoot>
</xsl:template>
</xsl:stylesheet>
想有這樣的事情結束了:
<newRoot>
<div num="1">
<p>paragraph 1</p>
</div>
<div num="2">
<p>Paragraph in another div.</p>
</div>
<div num="3">
<h4>header</h4>
<p>1st line</p>
<p>2nd line</p>
<br/>
<p>3rd line</p>
<p>4th line</p>
<page n="100"/>
<p>5th line</p>
</div>
</newRoot>
什麼是這裏預期的結果? - 「*我已經成功使用Muenchian分組完成XSLT 1.0 *」爲什麼不張貼? –
@ michael.hor257k對不起,我應該包括在第一次。我更新了它,謝謝! –
該示例中的邏輯不明顯。爲什麼第三組不包含'div'? –