当前位置: 首页 > 知识库问答 >
问题:

WSO2 ESB在xslt中添加默认命名空间

邓声
2023-03-14

我使用的是WSO2 ESB 4.8.1,我希望使用XSLT修改soap消息。

我的soap消息:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:getResponse xmlns:ns2="http://nis.ayss.com.tr/">
         <return>
            <result>true</result>
            <responseList>
               <name>STACK</name>
               <number>001</number>
            </responseList>
         </return>
      </ns2:getResponse>
   </S:Body>
</S:Envelope>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:getResponse xmlns:ns2="http://nis.ayss.com.tr/">
         <return>
            <result>true</result>
            <responseList>
               <brand>STACK</brand>
               <number>001</number>
            </responseList>
         </return>
      </ns2:getResponse>
   </S:Body>
</S:Envelope>

XSLT:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns2="http://nis.ayss.com.tr/">

    <xsl:output method="xml" indent="yes"/>

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

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

</xsl:stylesheet>

我在WSO2 ESB中创建了一个xslt文件作为本地条目。但是它添加了一个默认名称空间xmlns=“http://ws.apache.org/ns/synapse”,并将xslt改为:

<xsl:template match="name">
    <brand xmlns="http://ws.apache.org/ns/synapse">
            <xsl:apply-templates select="@*|node()"/>
    </brand>
</xsl:template>

因此,我的soap messsage结果是:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:getResponse xmlns:ns2="http://nis.ayss.com.tr/">
         <return>
            <result>true</result>
            <responseList>
               <brand xmlns="http://ws.apache.org/ns/synapse">STACK</brand>
               <number>001</number>
            </responseList>
         </return>
      </ns2:getResponse>
   </S:Body>
</S:Envelope>

如何在WSO2 ESB中使用XSLT修改此元素名称而不添加命名空间?

共有1个答案

顾恺
2023-03-14

在XSL本地条目中,用XSL:element替换“brand”标记

 <xsl:template match="name">
        <xsl:element name="brand">
                <xsl:apply-templates select="@*|node()"/>
        </xsl:element>
</xsl:template>
 类似资料:
  • 我需要使用默认命名空间创建/读取xml文件: 但我得到: 我知道包级元数据,但这在复杂的包结构中不起作用: 我已经定义了模型类,如Address: 客户: 公共字段的父类: 然后是保存具体xml XmlBoo的数据/结构的特定类: XmlFoo: package-info.java包括在两个提到的包example.xml.boo: 和example.xml.foo: 最后是主要方法: 我在这里尝试

  • 我需要添加/删除一些前缀节点。例如节点->或节点->或节点->....有更多的节点xml输入,但我只放了几个。 我需要在节点响应中包含ns1,因为当我导入到SAP PO时,它会说“ns1未声明”。我想我给节点添加了ns1前缀,但我不知道。我尝试在测试SAP中手动将ns1包含在节点中并进行操作。在其他转换xslt之后,只有我需要所有xml的节点响应来映射。 这是im使用的xslt:

  • 我有以下XML示例 标准是只复制“item-name”属性值为TShert、Ball和Bat的位置(即:还有更多元素,但我们只使用白名单)。生成的XML应该像 以下XSL不起作用 如果从XML中删除了默认名称空间“urn:com:ssn:schema:export:SSNExportFormat.xsd”,则XSLT可以工作。你能帮忙吗?

  • 我有这个xml是架构版本3.0http://www.test.com/Service/v3。我需要将其降级到版本1http://www.test.com/Service/v1.为此,我使用XSL来转换它。 但我得到这样的结果 在我的输出XML中,我得到了这个 为什么将其添加到NS2:消息中? 它不在输入xml中。 我遗漏了一些东西。如果有人能指出这个问题,我将不胜感激。 我希望在输出中创建以下内容

  • 如果我删除所有命名空间和前缀,我的XSLT转换将完美运行。 我曾尝试过几次引入名称空间,但最终总是出现某种错误或没有输出,因此我在这里寻求一些帮助和理解。 我的预期输出,缩减为命名空间和前缀,是: 再次缩减的XML输入是: 为了实现正确的命名空间转换,我需要向XSLT头中添加什么?

  • 我试图用XSLT处理器在PHP中转换xml文档,但我无法选择任何内容。。。我认为这是一个名称空间问题。如果我从一个干净的<代码> inputxml: Xsl-file: 我无法更改输入文件,因为它是由其他程序生成的。 安德烈