所以我有一个看起来像这样的请求......
<Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSche## Heading ##ma"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.xmlsoap.org/soap/envelope/"
>
<Body>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:tem="http://tempuri.org/"
>
<soap:Body>
<tem:Login>
<tem:username>test</tem:username>
<tem:password>test</tem:password>
</tem:Login>
</soap:Body>
</soap:Envelope>
</Body>
</Envelope>
我需要让它看起来像这样......
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:tem="http://tempuri.org/"
>
<soap:Body>
<tem:Login>
<tem:username>test</tem:username>
<tem:password>test</tem:password>
</tem:Login>
</soap:Body>
</soap:Envelope>
所以只需要删除第一个信封和身体。我正在考虑一些与此非常接近的代码,但这并不是很有效......
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>
<xsl:output indent="yes" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="Envelope*">
<xsl:apply-templates select="@* | node()" />
</xsl:template>
</xsl:stylesheet>
感谢任何帮助。谢谢!
答案 0 :(得分:1)
简单的事情怎么样?
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="soap:Envelope">
<xsl:copy-of select="." />
</xsl:template>
</xsl:stylesheet>
或者,如果您愿意:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="soap:Envelope | soap:Body">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
</xsl:stylesheet>
请注意,soap:
此处不是soap:
。
答案 1 :(得分:0)
试试这个,我得到了你想要的东西:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[name()='Envelope']|*[name()='Body']">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>