我有一个XML,如下所示。该XML具有3个命名空间中的元素。我想删除1个命名空间的数据和元素/属性,并保留带有2个namepsaces及其元素的最终XML。
开发环境: 1.春天 2. Java 8
<ns1:animals xmlns:ns1="http://.../animal" xmlns:ns2="http://.../tiger" xmlns:ns3="http://.../fish">
<ns1:animalDescription>
<ns1:animalType>fish</ns1:animalType>
<ns1:animalLength>VALUE</ns1:animalLength>
<ns1:partsOfBody>
<ns1:eyes ns3:isCompund="true">
<ns1:countOfEyes>100</ns1:countOfEyes>
</ns1:eyes>
<ns3:gills>bigGills</ns3:gills>
</ns1:animalDescription>
<ns1:animalDescription>
<ns1:animalType>TIGER</ns1:animalType>
<ns1:animalLength>3 meter</ns1:animalLength>
<ns1:partsOfBody>
<ns1:eyes>
<ns1:countOfEyes>2</ns1:countOfEyes>
</ns1:eyes>
<ns2:tailLength>1 Meter</ns2:tailLength>
</ns1:animalDescription>
<ns1:animals>
我要删除nameSpace xmlns:ns3 =“ http://.../fish”。我想要如下的最终XML。我已经尝试过执行字符串操作,但对于复杂的xsd而言却没有用。我想使用任何XML API来执行此操作。请指导我。该用什么来达到目的。我正在寻找有效的解决方案。
<ns1:animals xmlns:ns1="http://.../animal" xmlns:ns2="http://.../tiger" xmlns:ns3="http://.../fish">
<ns1:animalDescription>
<ns1:animalType>fish</ns1:animalType>
<ns1:animalLength>VALUE</ns1:animalLength>
<ns1:partsOfBody>
<ns1:eyes>
<ns1:countOfEyes>100</ns1:countOfEyes>
</ns1:eyes>
</ns1:animalDescription>
<ns1:animalDescription>
<ns1:animalType>TIGER</ns1:animalType>
<ns1:animalLength>3 meter</ns1:animalLength>
<ns1:partsOfBody>
<ns1:eyes>
<ns1:countOfEyes>2</ns1:countOfEyes>
</ns1:eyes>
<ns2:tailLength>1 Meter</ns2:tailLength>
</ns1:animalDescription>
<ns1:animals>
最终XML没有以下数据。 1. ns3:isCompund =“ true” 2. bigGills
答案 0 :(得分:0)
在XSLT 3.0中:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="ns3:* ! @ns3:*" xmlns:ns3="http://.../fish"/>
</xsl:transform>
如果只有XSLT 1.0或2.0,请用标准的浅表副本身份模板规则替换xsl:mode
声明。