首页 > 解决方案 > 使用 xslt 删除自定义 xml 命名空间

问题描述

我正在尝试删除 xml 文档中的命名空间并收到以下错误:

错误:'元素“car:name”的前缀“car”未绑定。' 错误:'com.sun.org.apache.xml.internal.utils.WrappedRuntimeException:元素“car:name”的前缀“car”未绑定。'

这是我的xml文件:

<car:name>Toyota Corolla</car:name>
<car:year>2000</car:year>

这是我的 removeNs.xslt

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" />

    <xsl:variable name="vLowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
    <xsl:variable name="vUppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />

    <xsl:template match="*">
        <xsl:element
            name="{concat(translate(substring(local-name(), 1, 1),                              
                              $vUppercase, $vLowercase),
                    substring(local-name(), 2))}">
            <xsl:apply-templates />
        </xsl:element>
    </xsl:template>
    <xsl:template match="@*">
        <xsl:attribute name="{local-name(.)}">
      <xsl:value-of select="." />
    </xsl:attribute>
    </xsl:template>
</xsl:stylesheet>

和我的java方法:

    private static String stripNameSpaces(String inXml) {
        String outputXml = "";
        try {
            StringWriter writer = new StringWriter();

            TransformerFactory factory = TransformerFactory.newInstance();
            Source xslt = new StreamSource(new File("./src/main/resources/removeNs.xslt"));
            Transformer transformer = factory.newTransformer(xslt);
            Source text = new StreamSource(new StringReader(inXml));

            transformer.transform(text, new StreamResult(writer));
            outputXml = writer.toString();

        } catch (TransformerConfigurationException tcEx) {
            tcEx.printStackTrace();
            return tcEx.getMessage();
        } catch (TransformerException tEx) {
            tEx.printStackTrace();
            return tEx.getMessage();
        }
        return outputXml;
    }

我的猜测是我必须向 removeNs.xslt 添加一些内容,但无法弄清楚是什么。如果有人可以帮助我,我将不胜感激

标签: javaxmlxslt

解决方案


推荐阅读