使用XSLT 1.0添加值

时间:2015-01-26 16:15:06

标签: xml xslt

对于任何传入请求

<soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<OrderCreate xmlns="urn:cidx:names:specification:ces:schema:all:5:1:1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Header>
        <ThisDocumentIdentifier>
            <DocumentIdentifier>72750037</DocumentIdentifier>
        </ThisDocumentIdentifier>
        <ThisDocumentDateTime>
            <DateTime DateTimeQualifier="On">2014-12-01T00:00:00Z</DateTime>
        </ThisDocumentDateTime>
    </Header>
</OrderCreate>
</soapenv:Body>

我需要在这里添加这一行。

<OrderCreate xmlns:ces="urn:cidx:names:specification:ces:schema:all:5:1:1" Version="2.0.2">

以下是代码

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ces="urn:cidx:names:specification:ces:schema:all:5:1:1" xmlns:dp="http://www.datapower.com/extensions" version="1.0" extension-element-prefixes="dp">
<xsl:template match="*[local-name()='OrderCreate']">
    <OrderCreate Version="2.0.2">
        <xsl:apply-templates select="node()"/>
    </OrderCreate>
</xsl:template>
<xsl:template match="*">
    <xsl:element name="{local-name()}">
        <xsl:apply-templates select="attribute::*|node()"/>
    </xsl:element>
</xsl:template>
</xsl:stylesheet>

由于某种原因,它不起作用。任何人都可以指出我在哪里做错了

我正在获得输出。

 <OrderCreate
xmlns="urn:cidx:names:specification:ces:schema:all:5:1:1"
xmlns:tns="http://www.w3.org/1999/xhtml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
>

1 个答案:

答案 0 :(得分:0)

我认为你犯了几个错误:

  • 您正在创建没有命名空间的元素
  • 您没有匹配属性,因此DateTimeQualifier未在输出中复制

此样式表会复制所有元素和属性,保留其名称空间,并将Version="2.0.2"添加到OrderCreate

XSLT 1.0

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ces="urn:cidx:names:specification:ces:schema:all:5:1:1"
    xmlns="urn:cidx:names:specification:ces:schema:all:5:1:1">
    <xsl:template match="ces:OrderCreate">
        <OrderCreate Version="2.0.2">
            <xsl:apply-templates select="node()"/>
        </OrderCreate>
    </xsl:template>
    <xsl:template match="* | @*">
        <xsl:copy>
            <xsl:apply-templates select="attribute::*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>