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

仅复制WSO2 SOAP信封中的内部元素并添加新的命名空间

冯宏放
2023-03-14

之前:

<por:ReadMostRecentPrices xmlns:por="http://PAS_1_1.ESB.OOO.com">
         <header>
            <sourceSystem>EDQC</sourceSystem>
            <userName>someguy</userName>
            <createdUtc>2020-10-10</createdUtc>
            <notes>dev test</notes>
            <serviceKey>password-not</serviceKey>
            <serverEnvironmentType>development</serverEnvironmentType>
         </header>
         <mostRecentPricesSet>
            <securityDurableKeys>
               <securityDurableKey>LZ0080300001</securityDurableKey>
               <securityDurableKey>LZ0080300002</securityDurableKey>
            </securityDurableKeys>
            <priceScheme>01</priceScheme>
            <date>2020-10-10</date>
         </mostRecentPricesSet>
      </por:ReadMostRecentPrices>

之后:

    <por:ReadMostRecentPrices xmlns:por="http://PAS_1_1.ESB.OOO.com">
             <mostRecentPricesSet>
                <urn:securityDurableKeys xmlns:urn="urn:epaservice">
                   <securityDurableKey>LZ0080300001</securityDurableKey>
                   <securityDurableKey>LZ0080300002</securityDurableKey>
                </urn:securityDurableKeys>
                <urn:priceScheme xmlns:urn="urn:epaservice">01</urn:priceScheme>
                <urn:date xmlns:urn="urn:epaservice">2020-10-10</urn:date>
             </mostRecentPricesSet>
          </por:ReadMostRecentPrices>

所需:

    <urn:securityDurableKeys xmlns:urn="urn:epaservice">
      <urn:securityDurableKey>LZ0080300001</urn:securityDurableKey>
      <urn:securityDurableKey>LZ0080300002</urn:securityDurableKey>
    </urn:securityDurableKeys>
    <urn:priceScheme xmlns:urn="urn:epaservice">01</urn:priceScheme>
    <urn:date xmlns:urn="urn:epaservice">2020-10-10</urn:date>
<?xml version="1.0" encoding="UTF-8"?>
<urn:request xmlns:urn="urn:epaservice">
  <urn:securityDurableKeys>
    <urn:securityDurableKey>LZ0080300001</urn:securityDurableKey>
    <urn:securityDurableKey>LZ0080300002</urn:securityDurableKey>
  </urn:securityDurableKeys>
  <urn:priceScheme>01</urn:priceScheme>
  <urn:date>2020-10-10</urn:date>
</urn:request>
         <?xml version="1.0" encoding="UTF-8"?>
         <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" version="1.0" exclude-result-prefixes="msxsl" xmlns:urn="urn:epaservice" xmlns:PortfolioAccountingService_1_1="http://PAS_1_1.ESB.OOO.com">
           <xsl:output method="xml" omit-xml-declaration="yes" indent="yes">
           </xsl:output>
           <xsl:template match="@* | node()">
             <xsl:copy>
               <xsl:apply-templates select="@* | node()">
               </xsl:apply-templates>
             </xsl:copy>
           </xsl:template>
           <!-- Removes the header START -->
           <xsl:template match="header">
           </xsl:template>
           <!-- Removes the header END -->
           <!-- mostRecentPrices operation START -->
           <xsl:template match="PortfolioAccountingService_1_1:ReadMostRecentPrices/mostRecentPricesSet/*">
             <xsl:element name="urn:{local-name()}" namespace="urn:epaservice">
               <xsl:apply-templates select="@* | node()"/>
             </xsl:element>
           </xsl:template>
           <xsl:template match="PortfolioAccountingService_1_1:ReadMostRecentPrices/mostRecentPricesSet/securityDurableKeys/*">
             <xsl:element name="urn:{local-name()}" namespace="urn:epaservice">
               <xsl:apply-templates select="@* | node()"/>
             </xsl:element>
           </xsl:template>
           <!-- mostRecentPrices operation END -->
         </xsl:stylesheet>
    null
    null

共有1个答案

赖鸿羲
2023-03-14

这里有一个你可以做到的方法:

<?xml version="1.0" encoding="UTF-8"?>
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0"
    xmlns:urn="urn:epaservice" 
    xmlns:por="http://PAS_1_1.ESB.OOO.com"
    exclude-result-prefixes="por">
     
  <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="/">
    <xsl:apply-templates select="por:ReadMostRecentPrices/mostRecentPricesSet"/>
  </xsl:template>
  
  <xsl:template match="mostRecentPricesSet">
    <xsl:apply-templates select="securityDurableKeys"/>
    <urn:priceScheme xmlns:urn="urn:epaservice"><xsl:value-of select="priceScheme"/></urn:priceScheme>
    <urn:date xmlns:urn="urn:epaservice"><xsl:value-of select="date"/></urn:date>
  </xsl:template>
  
  <xsl:template match="securityDurableKeys">
    <urn:securityDurableKeys xmlns:urn="urn:epaservice">
      <xsl:apply-templates select="securityDurableKey"/>
    </urn:securityDurableKeys>
  </xsl:template>
  
  <xsl:template match="securityDurableKey">
    <urn:securityDurableKey><xsl:value-of select="."/></urn:securityDurableKey>
  </xsl:template>
  
</xsl:stylesheet>

在此处查看其工作情况:https://xsltfiddle.libertydevelopment.net/3meczxb

如果您可以在与您将在服务器上使用的引擎相同的引擎上测试您的转换,那么就会简单得多。

 类似资料:
  • XML信封命名空间的正确URI是什么。我见过很多,例如。”http://www.w3.org/2001/12/soap-envelope“,”http://www.w3.org/2001/06/soap-envelope“,”http://www.w3.org/2003/05/soap-envelope“,”http://schemas.xmlsoap.org/soap/envelope/“。请告

  • 我使用CXF从WSDL/XSD生成java类,然后返回XML(用于JMS)。 在生成的一个类中,它表示:

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

  • 我有几个关于JAXB编组的简单问题。我正在尝试封送包含以下字段的类: 只需使用以下序列化代码: 我得到的输出是: 现在,我面临的问题如下: > 我想要名称空间xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“出现在根元素中,即TokenRestrictionTemplate中,而不是单个子元素中。如何实现这一点? 我有一些元素,例如带有@Xm

  • 我正在写一个实用程序之间的集成内部系统和第三方产品。我试图生成一个可以由第三方产品加载的xml文件,但我很难按照他们的要求生成xml。我已经创建了一个简化的版本,只是为了测试。 预期产出应如下: 我的代码如下: 主要: 课程类别: