Удалите пользовательские пространства имен XML с помощью xslt - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь удалить пространства имен в документе xml и получаю следующую ошибку:

ОШИБКА: 'Префикс "car" для элемента "car: name" не связан.'ОШИБКА: 'com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: префикс "car" для элемента "car: name" не связан.'

Вот мой 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;
    }

Я предполагаю, что мне нужно что-то добавить, чтобы удалитьNs.xslt, но неудалось выяснить что.Если бы кто-то мог помочь мне с этим, я бы очень признателен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...