XLST模板,用于从CreateInterfaceRequest标记中删除额外的声明

时间:2017-02-05 11:01:24

标签: xslt soap

以下是输入:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <CreateInterfaceRequest Destination="KISTA" CreatedBy="ONETM">
      <Source_ObjectID>TEST24</Source_ObjectID>
    </CreateInterfaceRequest>
  </s:Body>
</s:Envelope>

我希望输出

<CreateInterfaceRequest> /* this needs to be as it is
  <Source_ObjectID>TEST24</Source_ObjectID>
</CreateInterfaceRequest>

使用SOAP附件。删除(Destination =“KISTA”CreatedBy =“ONETM”)

我使用了这个XSLT模板匹配代码

<xsl:template match="CreateInterfaceRequest/*"> 
  <CreateInterfaceRequest> 
    <xsl:apply-templates/> 
  </CreateInterfaceRequest> 
<xsl:template>

但是它给出了错误

  

模板匹配无法在BODY中声明

1 个答案:

答案 0 :(得分:0)

此模板是实现此目的的一种可能性。它只删除Source_ObjectID节点的名称空间并复制所有CreateInterfaceRequest个节点(并删除其所有属性)。

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

  <xsl:template match="//CreateInterfaceRequest"> 
    <CreateInterfaceRequest> 
      <xsl:apply-templates select="*" />
    </CreateInterfaceRequest> 
  </xsl:template>

  <xsl:template match="Source_ObjectID"> 
    <xsl:element name="Source_ObjectID" namespace=""> 
      <xsl:copy-of select="node()|@*" />
    </xsl:element> 
  </xsl:template>

</xsl:stylesheet>

<强>输出:

<?xml version="1.0"?>
<CreateInterfaceRequest>
    <Source_ObjectID>TEST24</Source_ObjectID>
</CreateInterfaceRequest>