您好我是xml的新手,我正在使用xslt删除namespaces.Below是输入代码。
<ks6:newRequest xmlns:ks6="http://example.com/connector/ssw" xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ks3="com.newtech.kake.notification"
xmlns:ks5="com.newtech.alert" xmlns:ks7="http://notification.newtech.com">
<ks5:new book = "5073">
<ks5:entityId>2314</ks5:entityId>
<ks5:entityName>newReq</ks5:entityName>
</ks5:new>
<ks3:new2>
<ks3:entityId>2315</ks3:entityId>
<ks3:entityName>newReq2</ks3:entityName>
</k3:new2>
</ks6:newRequest>
我想要做的是删除命名空间ks6及其URI,即它的xmlns,并使用命名空间ks5而不是ks6。 在这里,我的输出应该如何。
<ks5:newRequest xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ks3="com.newtech.kake.notification"
xmlns:ks5="com.newtech.alert" xmlns:ks7="http://notification.newtech.com">
<ks5:new book = "5073">
<ks5:entityId>2314</ks5:entityId>
<ks5:entityName>newReq</ks5:entityName>
</ks5:new>
<ks3:new2>
<ks3:entityId>2315</ks3:entityId>
<ks3:entityName>newReq2</ks3:entityName>
</k3:new2>
</ks5:newRequest>
谢谢,
答案 0 :(得分:0)
使用XSLT,您必须编写与要转换的节点匹配的模板,因为在您的情况下,您希望更改某个命名空间中元素的命名空间,并希望从您需要的其他元素中删除命名空间
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{name()}" namespace="{namespace-uri()}">
<xsl:copy-of select="namespace::*[not(. = 'http://example.com/connector/ssw')]"/>
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="ks6:*" xmlns:ks6="http://example.com/connector/ssw">
<xsl:element name="ks5:{local-name()}" namespace="com.newtech.alert">
<xsl:copy-of select="namespace::*[not(. = 'http://example.com/connector/ssw')]"/>
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>