这是我的XML:
<?xml version="1.0" encoding="UTF-8" ?>
<RequestValuesResponse xmlns="http://www.camstar.com/WebService/WSShopFloor">
<RequestValuesResult>true</RequestValuesResult>
<responseServiceData q3:type="LotModifyAttrs" xmlns:q3="http://www.camstar.com/WebService/DataTypes">
<CompletionMsg xmlns="http://www.camstar.com/WebService/DataTypes">Update completed successfully</CompletionMsg>
<SelectionContainer xmlns="http://www.camstar.com/WebService/DataTypes">
<__name>5454545</__name>
<__level>
<__name>LOT</__name>
</__level>
<__Id>4802378000000610</__Id>
</SelectionContainer>
<ServiceAttrsDetailsSelection xmlns="http://www.camstar.com/WebService/DataTypes">
<__listItem type="ServiceAttrsDetails">
<__parent>
<__Id>4806490000000018</__Id>
</__parent>
<__Id>4805ad00000001c5</__Id>
<AttributeName>AllowLotSchedule</AttributeName>
<AttributeValue>True</AttributeValue>
</__listItem>
<__listItem type="ServiceAttrsDetails">
<__parent>
<__Id>4806490000000018</__Id>
</__parent>
<__Id>4805ad00000001c9</__Id>
<AttributeName>AssemblyCountry</AttributeName>
<AttributeValue/>
</__listItem>
</ServiceAttrsDetailsSelection>
</responseServiceData>
<resultStatus type="q1:ResultStatus" xmlns:q1="http://www.camstar.com/WebService/DataTypes">
<Message xmlns="http://www.camstar.com/WebService/DataTypes">Update completed successfully</Message>
<IsError xmlns="http://www.camstar.com/WebService/DataTypes">false</IsError>
</resultStatus>
</RequestValuesResponse>
这是我的XSL的样子:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:ns2="http://www.camstar.com/WebService/WSShopFloor"
xmlns:q3="http://www.camstar.com/WebService/DataTypes"
exclude-result-prefixes="q3 xsi xsl xsd wsdl ns2">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/">
<AttributeDetailsCollection>
<xsl:copy-of select="/ns2:RequestValuesResponse/ns2:responseServiceData/q3:ServiceAttrsDetailsSelection">
<?oracle-xsl-mapper-position ServiceAttrsDetailsSelection?>
</xsl:copy-of>
</AttributeDetailsCollection>
</xsl:template>
</xsl:stylesheet>
来自xsl的输出:
<?xml version = '1.0' encoding = 'UTF-8'?>
<AttributeDetailsCollection>
<ServiceAttrsDetailsSelection xmlns="http://www.camstar.com/WebService/DataTypes" xmlns:q3="http://www.camstar.com/WebService/DataTypes">
<__listItem type="ServiceAttrsDetails">
<__parent>
<__Id>4806490000000018</__Id>
</__parent>
<__Id>4805ad00000001c5</__Id>
<AttributeName>AllowLotSchedule</AttributeName>
<AttributeValue>True</AttributeValue>
</__listItem>
<__listItem type="ServiceAttrsDetails">
<__parent>
<__Id>4806490000000018</__Id>
</__parent>
<__Id>4805ad00000001c9</__Id>
<AttributeName>AssemblyCountry</AttributeName>
<AttributeValue/>
</__listItem>
</ServiceAttrsDetailsSelection>
</AttributeDetailsCollection>
注意输出中的行:
<ServiceAttrsDetailsSelection xmlns="http://www.camstar.com/WebService/DataTypes" xmlns:q3="http://www.camstar.com/WebService/DataTypes">
我希望删除名称空间声明,所以它应该只是:
<ServiceAttrsDetailsSelection>
但至少看起来应该是这样的:
<ServiceAttrsDetailsSelection xmlns:q3="http://www.camstar.com/WebService/DataTypes">
我可以使用前缀处理命名空间。
答案 0 :(得分:0)
如果要更改命名空间,则无法使用copy-of
。因此,通过剥去命名空间的模板推送您的元素:
<xsl:template match="/">
<AttributeDetailsCollection>
<xsl:apply-templates select="/ns2:RequestValuesResponse/ns2:responseServiceData/q3:ServiceAttrsDetailsSelection">
</AttributeDetailsCollection>
</xsl:template>
<xsl:template match="ns2:*">
<xsl:element name="{local-name()}">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>