【发布时间】:2019-08-22 11:50:57
【问题描述】:
当它们直接跟随兄弟姐妹时,我尝试用标签作者:(姓氏和名字)标签包围。如果没有以这种方式排序,则直接将标签(名字或姓氏)包围。此标签由特定属性 (bilbo) 指定。所有标签都有一个默认命名空间,我需要使用 XSLT 1.0。
这是我的 xml 输入。
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<surname> Amblard </surname>
<bibl>
<surname bilbo="True"> Amblard </surname>
<forename bilbo="True"> F. </forename>
<c bilbo="True"> , </c>
<forename bilbo="True"> P. </forename>
<title>titre</title>
<surname bilbo="True"> Amblard </surname>
</bibl>
</TEI>
这是我的 xsl 文件:
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
xmlns:tei = "http://www.tei-c.org/ns/1.0">
<xsl:template match = "@*|node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="tei:surname[@bilbo]">
<xsl:element name="author" namespace="http://www.tei-c.org/ns/1.0">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
<xsl:if test="following-sibling::*[1][self::forename and @bilbo]">
<xsl:copy-of select="following-sibling::*[1]"/>
</xsl:if>
</xsl:element>
</xsl:template>
<xsl:template match="tei:forename[@bilbo]">
<xsl:if test="not(preceding-sibling::*[1][self::surname and @bilbo])">
<xsl:element name="author" namespace="http://www.tei-c.org/ns/1.0">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:element>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
输出是:
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<surname> Amblard </surname>
<bibl>
<author>
<surname bilbo="True"> Amblard </surname>
</author>
<author>
<forename bilbo="True"> F. </forename>
</author>
<c bilbo="True"> , </c>
<author>
<forename bilbo="True"> P. </forename>
</author><title>titre</title>
<author>
<surname bilbo="True"> Amblard </surname>
</author>
</bibl>
</TEI>
但预期的输出应该是:
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<surname> Amblard </surname>
<bibl>
<author>
<surname bilbo="True"> Amblard </surname>
<forename bilbo="True"> F. </forename>
</author>
<c bilbo="True"> , </c>
<author>
<forename bilbo="True"> P. </forename>
</author><title>titre</title>
<author>
<surname bilbo="True"> Amblard </surname>
</author>
</bibl>
</TEI>
请注意,此帖子遵循以前的票证:(xslt transform and lxml python problem to handle namespace。提前感谢您的帮助。
【问题讨论】:
标签: xml python-3.x xslt-1.0 lxml