我需要将xml转换为另一种xml格式,我需要为父元素journalcontent按序列顺序为所有部分和章节提供id。
<?xml version="1.0" encoding="UTF-8"?>
<book>
<footnote>
<journal>
<section>Fir</section> sum <chapter>sec</chapter>
</journal>
</footnote>
<footnote>
<journal>
<section>thir</section> sum <chapter>four</chapter>
</journal>
</footnote>
<footnote>
<journal>
<section>ff</section> sum <chapter>66</chapter>
</journal>
</footnote>
</book>
我在xslt下面试过,但输出不是核心
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="book">
<book>
<xsl:apply-templates/>
</book>
</xsl:template>
<xsl:template match="//footnote">
<xsl:variable name="seq">
<xsl:number format="001" level="any"/>
</xsl:variable>
<xsl:for-each select="journal">
<xsl:if test="section">
<journalcontent>
<xsl:attribute name="id">
<xsl:value-of select="$seq"/>
</xsl:attribute>
<xsl:copy-of select="section"/>
</journalcontent>
</xsl:if>
<xsl:if test="chapter">
<journalcontent>
<xsl:attribute name="id">
<xsl:value-of select="$seq"/>
</xsl:attribute>
<xsl:copy-of select="chapter"/>
</journalcontent>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我得到了以下输出
<?xml version="1.0" encoding="UTF-8"?><book>
<journalcontent id="001"><section>Fir</section></journalcontent>
<journalcontent id="001"><chapter>sec</chapter></journalcontent>
<journalcontent id="002"><section>thir</section></journalcontent>
<journalcontent id="002"><chapter>four</chapter></journalcontent>
<journalcontent id="003"><section>ff</section></journalcontent>
<journalcontent id="003"><chapter>66</chapter></journalcontent>
</book>
我希望输出为下面提到的唯一ID
<?xml version="1.0" encoding="UTF-8"?>
<book>
<journalcontent id="001"><section>Fir</section></journalcontent>
<journalcontent id="002"><chapter>sec</chapter></journalcontent>
<journalcontent id="003"><section>thir</section></journalcontent>
<journalcontent id="004"><chapter>four</chapter></journalcontent>
<journalcontent id="005"><section>ff</section></journalcontent>
<journalcontent id="006"><chapter>66</chapter></journalcontent>
</book>
任何人都试图帮助我
答案 0 :(得分:0)
您的编号基于footnote
元素,其中只有3个。当您尝试为section
元素中的chapter
和journal
编号时,如果您更改模板以匹配journal
元素,然后在此
chapter
或section
元素,则可能会更好
<xsl:template match="journal">
<xsl:for-each select="section|chapter">
然后,要获取序列号,请计算任意级别section
或chapter
元素的数量
<xsl:attribute name="id">
<xsl:number format="001" count="section|chapter" level="any"/>
</xsl:attribute>
试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:strip-space elements="*" />
<xsl:output method="xml" indent="yes" />
<xsl:template match="book">
<book>
<xsl:apply-templates/>
</book>
</xsl:template>
<xsl:template match="journal">
<xsl:for-each select="section|chapter">
<journalcontent>
<xsl:attribute name="id">
<xsl:number format="001" count="section|chapter" level="any"/>
</xsl:attribute>
<xsl:copy-of select="."/>
</journalcontent>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>