Xml XSL转换不需要';不要在元素之前写名称空间

Xml XSL转换不需要';不要在元素之前写名称空间,xml,xslt,namespaces,xslt-1.0,xslt-2.0,Xml,Xslt,Namespaces,Xslt 1.0,Xslt 2.0,我必须更新odt文件中的content.xml文件。 我想从元素中获得相同的文件内容,不带空格,也不带换行符 我曾尝试在Java中对Transformer对象使用xsl转换,但部分效果良好。 例如,有一个简单的odt,其content.xml如下所示: <?xml version="1.0" encoding="utf-8" ?> <office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xml

我必须更新odt文件中的content.xml文件。 我想从元素中获得相同的文件内容,不带空格,也不带换行符

我曾尝试在Java中对Transformer对象使用xsl转换,但部分效果良好。 例如,有一个简单的odt,其content.xml如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.2">
    <office:font-face-decls>
        <style:font-face style:name="Courier New" style:font-family-generic="modern" style:font-pitch="fixed" svg:font-family="'Courier New'" />
    </office:font-face-decls>
    <office:automatic-styles>

    </office:automatic-styles>
    <office:body>
        <office:text>
            <text:p text:style-name="Title">TODO supply a title</text:p>
            <text:p text:style-name="Text_20_body">TODO write content</text:p>
            <text:h text:style-name="Heading_20_1" text:outline-level="1">My First Heading</text:h>
            <text:p text:style-name="First_20_paragraph">My first paragraph.</text:p>
        </office:text>
    </office:body>
</office:document-content>
<?xml version="1.0" encoding="ISO-8859-15"?><document-content xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.2"><font-face-decls><font-face style:font-family-generic="modern" style:font-pitch="fixed" style:name="Courier New" svg:font-family="'Courier New'"/></font-face-decls><automatic-styles/><body><text><p text:style-name="Title">TODO supply a title</p><p text:style-name="Text_20_body">TODO write content</p><h text:outline-level="1" text:style-name="Heading_20_1">My First Heading</h><p text:style-name="First_20_paragraph">My first paragraph.</p></text></body></document-content>
 public void serializeXML(String filePath, String destinationPath) throws Exception {
    File xmlFile = new File(filePath);
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(xmlFile);
    doc.normalizeDocument();

    DOMSource domSource = new DOMSource(doc);
    TransformerFactory transformerFactory = TransformerFactory.newInstance();

    InputStream is = XMLSerializer.class.getClassLoader().getResourceAsStream("identer.xsl");

    Transformer transformer = transformerFactory.newTransformer(new StreamSource(is));

    StringWriter sw = new StringWriter();
    StreamResult sr = new StreamResult(sw);
    transformer.transform(domSource, sr);

    Result result = new StreamResult(new FileOutputStream(new File(destinationPath)));

    transformer.transform(domSource, result);

    LOGGER.info(sw.toString());
}
我声明Transformer对象,将xsl文件的inputStream传递给它。 我没有设置任何属性,因为我声明(我认为)xsl文件中的所有内容都是必需的,然后我转换文档,将结果保存在文件中并使用记录器打印

有人能帮我吗


谢谢。

我解决了问题,感谢回答我问题的用户

我修改了代码,因此xsl现在是:


如何设置/配置转换器?使用此联机转换器,您的代码可以正常工作:对我来说很好。至于扩展元素前缀,该属性与要复制的命名空间没有任何关系,它只是指示命名空间中的元素被视为扩展元素指令。@robert为了配置转换器,我使用了以下指令:
InputStream is=XMLSerializer.class.getClassLoader().getResourceAsStream()(“ident.xsl”);Transformer Transformer=transformerFactory.newTransformer(新StreamSource(is));StringWriter sw=new StringWriter();StreamResult sr=new StreamResult(sw);Transformer.transform(domSource,sr);Result Result=new StreamResult(新文件输出流(新文件(destinationPath));Transformer.transform(domSource,Result);
。我不使用setOutputProperty方法,因为缩进和编码是在xsl文件中指定的。@Milioliuca转换器的实际实现是什么?如果不确定,请检查transformerFactory.newTransformer(…).getClass().getName()。
 public void serializeXML(String filePath, String destinationPath) throws Exception {
    File xmlFile = new File(filePath);
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(xmlFile);
    doc.normalizeDocument();

    DOMSource domSource = new DOMSource(doc);
    TransformerFactory transformerFactory = TransformerFactory.newInstance();

    InputStream is = XMLSerializer.class.getClassLoader().getResourceAsStream("identer.xsl");

    Transformer transformer = transformerFactory.newTransformer(new StreamSource(is));

    StringWriter sw = new StringWriter();
    StreamResult sr = new StreamResult(sw);
    transformer.transform(domSource, sr);

    Result result = new StreamResult(new FileOutputStream(new File(destinationPath)));

    transformer.transform(domSource, result);

    LOGGER.info(sw.toString());
}
<xsl:output method="xml" encoding="ISO-8859-15" indent="no"/>
<xsl:strip-space elements="*" />

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
 public void serializeXML(String filePath, String destinationPath) throws Exception {

        TransformerFactory factory = TransformerFactory.newInstance();
        InputStream is = XMLSerializer.class.getClassLoader().getResourceAsStream("identer.xsl");
        Source xslt = new StreamSource(is);
        Transformer transformer = factory.newTransformer(xslt);

        Source text = new StreamSource(new File(filePath));
        transformer.transform(text, new StreamResult(new File(destinationPath)));

    }