Xml XSLT不工作。。。属性
我有我想要转换的XSLT和XML负载。但是输出xml不包含元素引擎的属性 如果有任何帮助,我们将不胜感激 这是我的xsltXml XSLT不工作。。。属性,xml,xslt,Xml,Xslt,我有我想要转换的XSLT和XML负载。但是输出xml不包含元素引擎的属性 如果有任何帮助,我们将不胜感激 这是我的xslt <?xml version="1.0" encoding="UTF-8" ?> <?oracle-xsl-mapper <!-- SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY. --> <mapSources> <sour
<?xml version="1.0" encoding="UTF-8" ?>
<?oracle-xsl-mapper
<!-- SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY. -->
<mapSources>
<source type="WSDL">
<schema location="../HTTPBinding.wsdl"/>
<rootElement name="Envelope" namespace="http://HPES.org/"/>
</source>
</mapSources>
<mapTargets>
<target type="WSDL">
<schema location="../Service1.wsdl"/>
<rootElement name="Envelope" namespace="http://HPES.org/"/>
</target>
</mapTargets>
<!-- GENERATED BY ORACLE XSL MAPPER 11.1.1.4.0(build 110106.1932.5682) AT [TUE JUN 07 11:17:07 CDT 2011]. -->
?>
<xsl:stylesheet version="1.0"
xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
xmlns:inp2="http://HPES.org/"
xmlns:mhdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.mediator.service.common.functions.MediatorExtnFunction"
xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue"
xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:med="http://schemas.oracle.com/mediator/xpath"
xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
xmlns:bpm="http://xmlns.oracle.com/bpmn20/extensions"
xmlns:xdk="http://schemas.oracle.com/bpel/extension/xpath/function/xdk"
xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:inp1="http://tempuri.org/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:ora="http://schemas.oracle.com/xpath/extension"
xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator"
xmlns:tns="http://oracle.com/sca/soapservice/Application1/Project1/Service1"
xmlns:ldap="http://schemas.oracle.com/xpath/extension/ldap"
exclude-result-prefixes="xsi xsl inp2 xsd inp1 wsdl tns bpws xp20 mhdr bpel oraext dvm hwf med ids bpm xdk xref ora socket ldap">
<xsl:template match="/">
<inp2:Envelope>
<Body>
<soapP1>
<soapP2>
<engine>
<xsl:attribute name="value">
<xsl:value-of select="/inp2:Envelope/Body/soapP1/soapP2/engine/@value"/>
</xsl:attribute>
<xsl:attribute name="txnElapsedTime">
<xsl:value-of select="/inp2:Envelope/Body/soapP1/soapP2/engine/@txnElapsedTime"/>
</xsl:attribute>
<xsl:value-of select="/inp2:Envelope/Body/soapP1/soapP2/engine"/>
</engine>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
</xsl:template>
</xsl:stylesheet>
这是我的输入xml
<soap:Envelope xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soapP1>
<soapP2>
<engine value="1" txnElapsedTime="0.05"/>
</soapP2>
</soapP1>
</soap:Body>
</soap:Envelope>
这是我的输出,其中属性丢失
<?xml version="1.0" encoding="utf-8"?>
<inp2:Envelope xmlns:inp2="http://HPES.org/">
<Body>
<soapP1>
<soapP2>
<engine value="" txnElapsedTime="">
</engine>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
您的XSLT使用了错误的XPATH来引用属性。如果我在中输入以下XSLT(使用名称空间
soap
而不是inp2
),我会得到您想要的结果:
XSLT:
<?xml version="1.0" encoding="UTF-8" ?>
<?oracle-xsl-mapper
<!-- SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY. -->
<mapSources>
<source type="WSDL">
<schema location="../HTTPBinding.wsdl"/>
<rootElement name="Envelope" namespace="http://HPES.org/"/>
</source>
</mapSources>
<mapTargets>
<target type="WSDL">
<schema location="../Service1.wsdl"/>
<rootElement name="Envelope" namespace="http://HPES.org/"/>
</target>
</mapTargets>
<!-- GENERATED BY ORACLE XSL MAPPER 11.1.1.4.0(build 110106.1932.5682) AT [TUE JUN 07 11:17:07 CDT 2011]. -->
?>
<xsl:stylesheet version="1.0"
xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
xmlns:inp2="http://HPES.org/"
xmlns:mhdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.mediator.service.common.functions.MediatorExtnFunction"
xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue"
xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:med="http://schemas.oracle.com/mediator/xpath"
xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
xmlns:bpm="http://xmlns.oracle.com/bpmn20/extensions"
xmlns:xdk="http://schemas.oracle.com/bpel/extension/xpath/function/xdk"
xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:inp1="http://tempuri.org/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:ora="http://schemas.oracle.com/xpath/extension"
xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator"
xmlns:tns="http://oracle.com/sca/soapservice/Application1/Project1/Service1"
xmlns:ldap="http://schemas.oracle.com/xpath/extension/ldap"
exclude-result-prefixes="xsi xsl inp2 xsd inp1 wsdl tns bpws xp20 mhdr bpel oraext dvm hwf med ids bpm xdk xref ora socket ldap">
<xsl:template match="/">
<inp2:Envelope>
<Body>
<soapP1>
<soapP2>
<engine>
<xsl:attribute name="value">
<xsl:value-of select="/soap:Envelope/Body/soapP1/soapP2/engine/@value"/>
</xsl:attribute>
<xsl:attribute name="txnElapsedTime">
<xsl:value-of select="/soap:Envelope/Body/soapP1/soapP2/engine/@txnElapsedTime"/>
</xsl:attribute>
<xsl:value-of select="/soap:Envelope/Body/soapP1/soapP2/engine"/>
</engine>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<inp2:Envelope xmlns:inp2="http://HPES.org/">
<Body>
<soapP1>
<soapP2>
<engine value="1" txnElapsedTime="0.05"/>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:inp2="http://HPES.org/"
exclude-result-prefixes="inp2">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="engine">
<inp2:Envelope>
<Body>
<soapP1>
<soapP2>
<engine>
<xsl:copy-of select="@*|node()"/>
</engine>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
</xsl:template>
</xsl:stylesheet>
<soap:Envelope
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soapP1>
<soapP2>
<engine value="1" txnElapsedTime="0.05"/>
</soapP2>
</soapP1>
</soap:Body>
</soap:Envelope>
<inp2:Envelope xmlns:inp2="http://HPES.org/">
<Body>
<soapP1>
<soapP2>
<engine value="1" txnElapsedTime="0.05"/>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
结果:
<?xml version="1.0" encoding="UTF-8" ?>
<?oracle-xsl-mapper
<!-- SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY. -->
<mapSources>
<source type="WSDL">
<schema location="../HTTPBinding.wsdl"/>
<rootElement name="Envelope" namespace="http://HPES.org/"/>
</source>
</mapSources>
<mapTargets>
<target type="WSDL">
<schema location="../Service1.wsdl"/>
<rootElement name="Envelope" namespace="http://HPES.org/"/>
</target>
</mapTargets>
<!-- GENERATED BY ORACLE XSL MAPPER 11.1.1.4.0(build 110106.1932.5682) AT [TUE JUN 07 11:17:07 CDT 2011]. -->
?>
<xsl:stylesheet version="1.0"
xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
xmlns:inp2="http://HPES.org/"
xmlns:mhdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.mediator.service.common.functions.MediatorExtnFunction"
xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue"
xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:med="http://schemas.oracle.com/mediator/xpath"
xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
xmlns:bpm="http://xmlns.oracle.com/bpmn20/extensions"
xmlns:xdk="http://schemas.oracle.com/bpel/extension/xpath/function/xdk"
xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:inp1="http://tempuri.org/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:ora="http://schemas.oracle.com/xpath/extension"
xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator"
xmlns:tns="http://oracle.com/sca/soapservice/Application1/Project1/Service1"
xmlns:ldap="http://schemas.oracle.com/xpath/extension/ldap"
exclude-result-prefixes="xsi xsl inp2 xsd inp1 wsdl tns bpws xp20 mhdr bpel oraext dvm hwf med ids bpm xdk xref ora socket ldap">
<xsl:template match="/">
<inp2:Envelope>
<Body>
<soapP1>
<soapP2>
<engine>
<xsl:attribute name="value">
<xsl:value-of select="/soap:Envelope/Body/soapP1/soapP2/engine/@value"/>
</xsl:attribute>
<xsl:attribute name="txnElapsedTime">
<xsl:value-of select="/soap:Envelope/Body/soapP1/soapP2/engine/@txnElapsedTime"/>
</xsl:attribute>
<xsl:value-of select="/soap:Envelope/Body/soapP1/soapP2/engine"/>
</engine>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<inp2:Envelope xmlns:inp2="http://HPES.org/">
<Body>
<soapP1>
<soapP2>
<engine value="1" txnElapsedTime="0.05"/>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:inp2="http://HPES.org/"
exclude-result-prefixes="inp2">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="engine">
<inp2:Envelope>
<Body>
<soapP1>
<soapP2>
<engine>
<xsl:copy-of select="@*|node()"/>
</engine>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
</xsl:template>
</xsl:stylesheet>
<soap:Envelope
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soapP1>
<soapP2>
<engine value="1" txnElapsedTime="0.05"/>
</soapP2>
</soapP1>
</soap:Body>
</soap:Envelope>
<inp2:Envelope xmlns:inp2="http://HPES.org/">
<Body>
<soapP1>
<soapP2>
<engine value="1" txnElapsedTime="0.05"/>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
似乎您需要的是这个简单而简短的转换:
<?xml version="1.0" encoding="UTF-8" ?>
<?oracle-xsl-mapper
<!-- SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY. -->
<mapSources>
<source type="WSDL">
<schema location="../HTTPBinding.wsdl"/>
<rootElement name="Envelope" namespace="http://HPES.org/"/>
</source>
</mapSources>
<mapTargets>
<target type="WSDL">
<schema location="../Service1.wsdl"/>
<rootElement name="Envelope" namespace="http://HPES.org/"/>
</target>
</mapTargets>
<!-- GENERATED BY ORACLE XSL MAPPER 11.1.1.4.0(build 110106.1932.5682) AT [TUE JUN 07 11:17:07 CDT 2011]. -->
?>
<xsl:stylesheet version="1.0"
xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
xmlns:inp2="http://HPES.org/"
xmlns:mhdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.mediator.service.common.functions.MediatorExtnFunction"
xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue"
xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:med="http://schemas.oracle.com/mediator/xpath"
xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
xmlns:bpm="http://xmlns.oracle.com/bpmn20/extensions"
xmlns:xdk="http://schemas.oracle.com/bpel/extension/xpath/function/xdk"
xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:inp1="http://tempuri.org/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:ora="http://schemas.oracle.com/xpath/extension"
xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator"
xmlns:tns="http://oracle.com/sca/soapservice/Application1/Project1/Service1"
xmlns:ldap="http://schemas.oracle.com/xpath/extension/ldap"
exclude-result-prefixes="xsi xsl inp2 xsd inp1 wsdl tns bpws xp20 mhdr bpel oraext dvm hwf med ids bpm xdk xref ora socket ldap">
<xsl:template match="/">
<inp2:Envelope>
<Body>
<soapP1>
<soapP2>
<engine>
<xsl:attribute name="value">
<xsl:value-of select="/soap:Envelope/Body/soapP1/soapP2/engine/@value"/>
</xsl:attribute>
<xsl:attribute name="txnElapsedTime">
<xsl:value-of select="/soap:Envelope/Body/soapP1/soapP2/engine/@txnElapsedTime"/>
</xsl:attribute>
<xsl:value-of select="/soap:Envelope/Body/soapP1/soapP2/engine"/>
</engine>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<inp2:Envelope xmlns:inp2="http://HPES.org/">
<Body>
<soapP1>
<soapP2>
<engine value="1" txnElapsedTime="0.05"/>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:inp2="http://HPES.org/"
exclude-result-prefixes="inp2">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="engine">
<inp2:Envelope>
<Body>
<soapP1>
<soapP2>
<engine>
<xsl:copy-of select="@*|node()"/>
</engine>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
</xsl:template>
</xsl:stylesheet>
<soap:Envelope
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soapP1>
<soapP2>
<engine value="1" txnElapsedTime="0.05"/>
</soapP2>
</soapP1>
</soap:Body>
</soap:Envelope>
<inp2:Envelope xmlns:inp2="http://HPES.org/">
<Body>
<soapP1>
<soapP2>
<engine value="1" txnElapsedTime="0.05"/>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
应用于提供的XML文档时:
<?xml version="1.0" encoding="UTF-8" ?>
<?oracle-xsl-mapper
<!-- SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY. -->
<mapSources>
<source type="WSDL">
<schema location="../HTTPBinding.wsdl"/>
<rootElement name="Envelope" namespace="http://HPES.org/"/>
</source>
</mapSources>
<mapTargets>
<target type="WSDL">
<schema location="../Service1.wsdl"/>
<rootElement name="Envelope" namespace="http://HPES.org/"/>
</target>
</mapTargets>
<!-- GENERATED BY ORACLE XSL MAPPER 11.1.1.4.0(build 110106.1932.5682) AT [TUE JUN 07 11:17:07 CDT 2011]. -->
?>
<xsl:stylesheet version="1.0"
xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
xmlns:inp2="http://HPES.org/"
xmlns:mhdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.mediator.service.common.functions.MediatorExtnFunction"
xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue"
xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:med="http://schemas.oracle.com/mediator/xpath"
xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
xmlns:bpm="http://xmlns.oracle.com/bpmn20/extensions"
xmlns:xdk="http://schemas.oracle.com/bpel/extension/xpath/function/xdk"
xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:inp1="http://tempuri.org/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:ora="http://schemas.oracle.com/xpath/extension"
xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator"
xmlns:tns="http://oracle.com/sca/soapservice/Application1/Project1/Service1"
xmlns:ldap="http://schemas.oracle.com/xpath/extension/ldap"
exclude-result-prefixes="xsi xsl inp2 xsd inp1 wsdl tns bpws xp20 mhdr bpel oraext dvm hwf med ids bpm xdk xref ora socket ldap">
<xsl:template match="/">
<inp2:Envelope>
<Body>
<soapP1>
<soapP2>
<engine>
<xsl:attribute name="value">
<xsl:value-of select="/soap:Envelope/Body/soapP1/soapP2/engine/@value"/>
</xsl:attribute>
<xsl:attribute name="txnElapsedTime">
<xsl:value-of select="/soap:Envelope/Body/soapP1/soapP2/engine/@txnElapsedTime"/>
</xsl:attribute>
<xsl:value-of select="/soap:Envelope/Body/soapP1/soapP2/engine"/>
</engine>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<inp2:Envelope xmlns:inp2="http://HPES.org/">
<Body>
<soapP1>
<soapP2>
<engine value="1" txnElapsedTime="0.05"/>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:inp2="http://HPES.org/"
exclude-result-prefixes="inp2">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="engine">
<inp2:Envelope>
<Body>
<soapP1>
<soapP2>
<engine>
<xsl:copy-of select="@*|node()"/>
</engine>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
</xsl:template>
</xsl:stylesheet>
<soap:Envelope
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soapP1>
<soapP2>
<engine value="1" txnElapsedTime="0.05"/>
</soapP2>
</soapP1>
</soap:Body>
</soap:Envelope>
<inp2:Envelope xmlns:inp2="http://HPES.org/">
<Body>
<soapP1>
<soapP2>
<engine value="1" txnElapsedTime="0.05"/>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
产生所需结果:
<?xml version="1.0" encoding="UTF-8" ?>
<?oracle-xsl-mapper
<!-- SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY. -->
<mapSources>
<source type="WSDL">
<schema location="../HTTPBinding.wsdl"/>
<rootElement name="Envelope" namespace="http://HPES.org/"/>
</source>
</mapSources>
<mapTargets>
<target type="WSDL">
<schema location="../Service1.wsdl"/>
<rootElement name="Envelope" namespace="http://HPES.org/"/>
</target>
</mapTargets>
<!-- GENERATED BY ORACLE XSL MAPPER 11.1.1.4.0(build 110106.1932.5682) AT [TUE JUN 07 11:17:07 CDT 2011]. -->
?>
<xsl:stylesheet version="1.0"
xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
xmlns:inp2="http://HPES.org/"
xmlns:mhdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.mediator.service.common.functions.MediatorExtnFunction"
xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue"
xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:med="http://schemas.oracle.com/mediator/xpath"
xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
xmlns:bpm="http://xmlns.oracle.com/bpmn20/extensions"
xmlns:xdk="http://schemas.oracle.com/bpel/extension/xpath/function/xdk"
xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:inp1="http://tempuri.org/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:ora="http://schemas.oracle.com/xpath/extension"
xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator"
xmlns:tns="http://oracle.com/sca/soapservice/Application1/Project1/Service1"
xmlns:ldap="http://schemas.oracle.com/xpath/extension/ldap"
exclude-result-prefixes="xsi xsl inp2 xsd inp1 wsdl tns bpws xp20 mhdr bpel oraext dvm hwf med ids bpm xdk xref ora socket ldap">
<xsl:template match="/">
<inp2:Envelope>
<Body>
<soapP1>
<soapP2>
<engine>
<xsl:attribute name="value">
<xsl:value-of select="/soap:Envelope/Body/soapP1/soapP2/engine/@value"/>
</xsl:attribute>
<xsl:attribute name="txnElapsedTime">
<xsl:value-of select="/soap:Envelope/Body/soapP1/soapP2/engine/@txnElapsedTime"/>
</xsl:attribute>
<xsl:value-of select="/soap:Envelope/Body/soapP1/soapP2/engine"/>
</engine>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<inp2:Envelope xmlns:inp2="http://HPES.org/">
<Body>
<soapP1>
<soapP2>
<engine value="1" txnElapsedTime="0.05"/>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:inp2="http://HPES.org/"
exclude-result-prefixes="inp2">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="engine">
<inp2:Envelope>
<Body>
<soapP1>
<soapP2>
<engine>
<xsl:copy-of select="@*|node()"/>
</engine>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
</xsl:template>
</xsl:stylesheet>
<soap:Envelope
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soapP1>
<soapP2>
<engine value="1" txnElapsedTime="0.05"/>
</soapP2>
</soapP1>
</soap:Body>
</soap:Envelope>
<inp2:Envelope xmlns:inp2="http://HPES.org/">
<Body>
<soapP1>
<soapP2>
<engine value="1" txnElapsedTime="0.05"/>
</soapP2>
</soapP1>
</Body>
</inp2:Envelope>
解释:只需一个模板,匹配
引擎
——所有必要的文字结果元素,这是将它们放入所需的新名称空间并摆脱原始元素拥有的其他名称空间节点的最简单方法。与您的转换(以及XSLT规范)保持一致,要使事情顺利进行,您需要:
- 声明uri的命名空间前缀
http://schemas.xmlsoap.org/soap/envelope/
- 将新前缀添加到排除列表中
- 根据声明的前缀选择元素
排除结果前缀更改为:
exclude-result-prefixes="soap xsi xsl inp2 xsd inp1 wsdl tns bpws xp20 mhdr bpel oraext dvm hwf med ids bpm xdk xref ora socket">
然后更改XPath以相应地选择元素。例如:
<xsl:value-of select="/soap:Envelope/soap:Body/soapP1/soapP2/engine/@value"/>
如果使用兼容的XSLT处理器(如Saxon)处理,这样的模板不会产生想要的结果。