XSLT用于移除SOAP信封和SOAP命名空间并处理SOAP正文。

huangapple go评论51阅读模式
英文:

XSLT to remove soap envelope and soap namespaces and process the soap body

问题

你需要将输入中的SOAP信封和SOAP命名空间移除,然后将其作为XML传递给后端。你期望的输出如下:

<Data>
 <DATE>string</DATE> 
 <STATUS>string</STATUS> 
 <CODE>string</CODE>
 </Data>

你正在使用以下代码:

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

<xsl:template match="comment()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:for-each select="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="/Body"/>
</xsl:attribute>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

但你得到的输出如下:

<?xml version="1.0" encoding="UTF-8"?>
<Envelope>
 <Body>
 <Data>
 <DATE>string</IDATE> 
 <STATUS>string</STATUS> 
 <CODE>string</CODE>
 </Data>
 </Body>
</Envelope>

如果你需要帮助来纠正代码以获得期望的输出,请提出具体的问题,我将尽力帮助你。

英文:

I need to remove the soap envelope and soap namespace from the input and pass it to the backend as xml
For e.g:
My input is

<xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://www.w3.org/2003/05/soapenvelope" xmlns:tem="http://tempuri.org/">
 <soap:Body>
 <tem:Data xmlns="http://tempuri.org/">
 <tem:DATE>string</tem:DATE> 
 <tem:STATUS>string</tem:STATUS> 
 <tem:CODE>string</tem:CODE>
 </tem:Data>
 </soap:Body>
</soap:Envelope>

my expected output is:

<Data>
 <DATE>string</DATE> 
 <STATUS>string</STATUS> 
 <CODE>string</CODE>
 </Data>
 

iam using the below code:

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

<xsl:template match="comment()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:for-each select="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="/Body"/>
</xsl:attribute>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

but iam getting the below output:

<?xml version="1.0" encoding="UTF-8"?>
<Envelope>
 <Body>
 <Data>
 <DATE>string</IDATE> 
 <STATUS>string</STATUS> 
 <CODE>string</CODE>
 </Data>
 </Body>
</Envelope>

答案1

得分: 1

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>

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

<xsl:template match="*">
<xsl:element name="{local-name()}">
xsl:apply-templates/
</xsl:element>
</xsl:template>

</xsl:stylesheet>

英文:

I think it would be sufficient to do:

&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;
&lt;xsl:output indent=&quot;yes&quot;/&gt;

&lt;xsl:template match=&quot;/*&quot;&gt;
	&lt;xsl:apply-templates select=&quot;*/*&quot;/&gt;
&lt;/xsl:template&gt;

&lt;xsl:template match=&quot;*&quot;&gt;
	&lt;xsl:element name=&quot;{local-name()}&quot;&gt;
		&lt;xsl:apply-templates/&gt;
	&lt;/xsl:element&gt;
&lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;

huangapple
  • 本文由 发表于 2023年5月10日 14:40:06
  • 转载请务必保留本文链接:https://go.coder-hub.com/76215540.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定