尝试使用 XSLT 向 xml 添加元素并为其赋值

泰勒·德登

我有一个 xml 文件,我想向其中添加元素 = 载体并为其指定值 = ABF。原始文件看起来像这样

<?xml version="1.0"?> 
<ABF>
<QUOTEID>L9V5442611</QUOTEID>
<CHARGE>166.08</CHARGE> 
<ADVERTISEDTRANSIT>1 Day</ADVERTISEDTRANSIT>

我正在使用下面的这个 xslt 文件进行以下更改

1- 添加 QUOTETENDER 作为开始和结束元素 .. 2- 删除 ABF 3- 插入一个 CARRIER 元素并赋予它 ABF 的值

我能够达到 1 和 2 但无法完成 3

我需要的结果是底部的 xml 片段

......有人可以帮忙..谢谢

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">
    <xsl:output method="xml" indent="no"/> 

    <xsl:template match="ABF">
        <xsl:element name="QUOTETENDER">
            <xsl:element name="CARRIER"></xsl:element>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

<?xml version="1.0" encoding="UTF-8"?>
<QUOTETENDER>
<CARRIER>ABF</CARRIER>
<QUOTEID>L9V5442611</QUOTEID>
<CHARGE>166.08</CHARGE>
<ADVERTISEDTRANSIT>1 Day</ADVERTISEDTRANSIT>
</QUOTETENDER>
麦兹汉森

您只需要ABF在 CARRIER 元素内部添加

<xsl:element name="CARRIER">ABF</xsl:element>

您可以简化事情并使用文字元素声明,因为您的元素名称是静态的而不是动态确定的:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:output method="xml" indent="no"/> 
    
    <xsl:template match="ABF">
        <QUOTETENDER>
            <CARRIER>ABF</CARRIER>
            <xsl:apply-templates select="@*|node()"/>
        </QUOTETENDER>
    </xsl:template>
    
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

您还可以使用local-name()匹配ABF元素的 :

<CARRIER><xsl:value-of select="local-name()"/></CARRIER>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章