xsl在顶部添加元素

时间:2016-07-20 02:51:22

标签: xml xslt

新手在这里。我有一个XML文件填充了这样的数据:

    Router::redirect('/news/news/:slug',
    array(
        'controller' => 'articles',
        'action' => 'view',
        'category' => 'news'
    ),
    array(
        'status' => '301'
    )
);

Router::connect('/news/:slug',
    array(
        'controller' => 'articles',
        'action' => 'view',
        'category' => 'news'
    )
);

我想添加这个元素:

<marker>
        <name>CIP-67</name>
        <address>Husterhohe</address>
        <country>DE</country>
</marker>

在name元素上方,如下所示:

<id>9999</id>

我的XSL文件是:

<marker>
        <id>9999</id>
        <name>CIP-67</name>
        <address>Husterhohe</address>
        <country>DE</country>
</marker>

当然,这会将新元素放在name元素下面。如何将其放在名称元素上方?

2 个答案:

答案 0 :(得分:0)

在这种情况下,您应该主要考虑插入主要是插入的父级,而不是它的兄弟。试试这个(其中包括一些精简的改动):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output indent="yes"/>
    <!-- Identity transform -->
    <xsl:template match="node()">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="marker">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <id>9999</id>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
    
</xsl:stylesheet>

答案 1 :(得分:0)

在XSLT 1.0中执行此操作的另一种简单方法

&#13;
&#13;
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output indent="yes"/>
 <xsl:template match="/">
<marker>
<id>9999</id>
       <xsl:apply-templates select="marker/*"/>
</marker>   
</xsl:template>
<xsl:template match="marker/*">
<xsl:copy-of select="."/>
</xsl:template> 
</xsl:stylesheet>
&#13;
&#13;
&#13;