我有一个需要使用XSLT修改的biblStruct
列表。输入如下所示:
<biblStruct>
<title type="label">Volmer 2001</title>
<author>
<persName>Volmer, Annett</persName>
</author>
<title type="titel">Die Gebrechen des Lebens. Zur Körpererfahrung in
Korrespondenzen des 18. Jahrhunderts</title>
<note type="faustdb">biogra</note>
<idno>3257</idno>
<note type="objektart">Bibliographie</note>
<idno>3257</idno>
<note type="objektart">Bibliographie</note>
<title type="label">Volmer 2001</title>
<author>
<persName>Volmer, Annett</persName>
</author>
<title type="titel">Die Gebrechen des Lebens. Zur Körpererfahrung in
Korrespondenzen des 18. Jahrhunderts</title>
<biblScope unit="sammelwerkin">Objekt 6677 / Biographien-Werke</biblScope>
<biblScope unit="sammelwerkseiten">138-149</biblScope>
<idno type="standortsign">UB Basel: AP IX 5844</idno>
<note type="erstellt">
<date>2005-01-19T00:00:00.000</date>
</note>
<note type="letztebearb">
<date>2016-10-10T00:00:00.000</date>
</note>
<note type="kategorie">Briefkultur, Netzwerke,
Transfer;Wissen(schaft)sgeschichte/Medizin</note>
</biblStruct>
我需要:
analytic
,用于将元素从title type="label"
分组到note type="objektart">
; monogr
,该元素从第二个title type="label"
到idno type="standortsign"
分组; imprint
内的元素monogr
- 此新元素应包含新元素publisher
和现有元素biblScope
; analytic
和monogr
之外。 输出应如下所示:
<biblStruct xml:id="volmer_2001">
<analytic>
<author>
<persName>Volmer, Annett</persName>
</author>
<title type="titel">Die Gebrechen des Lebens. Zur Körpererfahrung in
Korrespondenzen des 18. Jahrhunderts</title>
<idno>3257</idno>
</analytic>
<monogr>
<author>
<persName>Volmer, Annett</persName>
</author>
<title type="titel">Die Gebrechen des Lebens. Zur Körpererfahrung in
Korrespondenzen des 18. Jahrhunderts</title>
<idno type="standortsign">UB Basel: AP IX 5844</idno>
<idno>3257</idno>
<imprint>
<publisher></publisher>
<biblScope unit="sammelwerkin">Objekt 6677 / Biographien-Werke</biblScope>
<biblScope unit="sammelwerkseiten">138-149</biblScope>
</imprint>
</monogr>
<note type="faustdb">biogra</note>
<note type="objektart">Bibliographie</note>
<note type="kategorie">Briefkultur, Netzwerke, Transfer;
Wissen(schaft)sgeschichte/Medizin</note>
<note type="erstellt">
<date>2005-01-19</date>
</note>
<note type="letztebearb">
<date>2016-10-10</date>
</note>
</biblStruct>
答案 0 :(得分:0)
在使用XSLT 2.0时,可以使用xsl:for-each-group
构造。您可以按biblStruct
note
的所有子元素(title
除外)进行分组
<xsl:for-each-group select="* except note" group-starting-with="title[@type='label']">
然后,在此范围内,您可以测试位置以确定是创建analytic
元素还是monogr
元素。
<xsl:choose>
<xsl:when test="position() = 1">
<analytic>
<xsl:apply-templates select="current-group()" />
</analytic>
</xsl:when>
<xsl:otherwise>
<monogr>
...
对于monogr
元素,您可以使用额外的逻辑来创建imprint
元素,并添加publisher
和现有的biblScope
元素。
<monogr>
<xsl:apply-templates select="current-group() except biblScope" />
<imprint>
<publisher />
<xsl:apply-templates select="biblScope" />
</imprint>
</monogr>
试试这个XSLT(其中还包括在末尾添加所有note
元素):
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="biblStruct">
<xsl:copy>
<xsl:for-each-group select="* except note" group-starting-with="title[@type='label']">
<xsl:choose>
<xsl:when test="position() = 1">
<analytic>
<xsl:apply-templates select="current-group()" />
</analytic>
</xsl:when>
<xsl:otherwise>
<monogr>
<xsl:apply-templates select="current-group() except biblScope" />
<imprint>
<publisher />
<xsl:apply-templates select="biblScope" />
</imprint>
</monogr>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
<xsl:apply-templates select="note" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>