我正在使用以下xslt表。这个转换很有效,除非它返回时,它为每个元素添加了不必要的命名空间声明。我只在根元素中声明了名称空间。请参阅下面的输出。
我不确定发生了什么。请帮忙。
XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0" xmlns:tei="http://www.tei-c.org/ns/1.0">
<xsl:output method="xml"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/ | @* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="tei:item">
<xsl:variable name="item" select="."></xsl:variable>
<xsl:analyze-string select="." regex="\(([^\)]*)\)">
<xsl:matching-substring>
<item xml:id="aa-meta-{regex-group(1)}"><xsl:value-of select="$item"/></item>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
示例输出:
<TEI xmlns="http://www.tei-c.org/ns/1.0" xmlns:xi="http://www.w3.org/2001/XInclude">
<teiHeader>
<fileDesc>
<titleStmt>
<title>Auctoritates Aristotelis</title>
<editor xml:id="JH">Hamesse</editor>
</titleStmt>
<publicationStmt>
<p/>
</publicationStmt>
<sourceDesc>
<p>Auctoritates Aristotelis, pp. ??-??</p>
</sourceDesc>
</fileDesc>
</teiHeader>
<text xml:lang="la">
<body>
<list>
<head>Sequuntur nunc auctoritates Philosophi, id est amatoris sapientiae.
Et primo primi libri Metaphysicae.</head>
<item xmlns="" xmlns:tei="http://www.tei-c.org/ns/1.0" xml:id="aa-meta-1">(1) Omnes homines naturaliter scire desiderant.</item>
<item xmlns="" xmlns:tei="http://www.tei-c.org/ns/1.0" xml:id="aa-meta-2">(2) Sensus visus multas nobis rerum differentias demonstrat.</item>
<item xmlns="" xmlns:tei="http://www.tei-c.org/ns/1.0" xml:id="aa-meta-3">(3) Solum hominum genus arte et ratione vivit.</item>
<item xmlns="" xmlns:tei="http://www.tei-c.org/ns/1.0" xml:id="aa-meta-4">(4) Experientia facit artem; inexperientia vero casum.</item>
<item xmlns="" xmlns:tei="http://www.tei-c.org/ns/1.0" xml:id="aa-meta-5">(5) Actus et operationes sunt circa singularia, quia medicus non sanat
hominem in communi, sed Socratem vel aliquem alium in parti-
culari, similiter et in aliis.</item>
答案 0 :(得分:0)
你的样式表说它正在添加一个非命名空间的<item>
元素。由于父(<list>
)继承了<TEI>
元素上的默认命名空间集,这意味着<item>
必须取消默认值,即xmlns=""
。这是正确的操作。
如果您希望<item>
位于TEI命名空间中,则样式表必须这样说...例如,通过说
<item xmlns="http://www.tei-c.org/ns/1.0" xml:id="aa-meta-{regex-group(1)}">
<xsl:value-of select="$item"/>
</item>