输出中的xslt命名空间标识

时间:2014-02-12 21:14:50

标签: xslt

我正在使用以下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>

1 个答案:

答案 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>