使用java和xsl文件将xml和xsd文件转换为csv文件

问题描述 投票:0回答:1

正如标题所说,我有一个 xml 和一个 xsd 文件,想使用 java 将它们转换为 csv 文件,并使用 xsl 文件对其进行结构化。

目前我只能转换我的 xml 文件并使用 java 中的以下代码使用 xsl 文件对其进行结构化:

public static void xmlToCSV() throws Exception{
        File stylesheet = new File("style.xsl");
        File xmlSource = new File("xmlData.xml");

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(xmlSource);

        StreamSource stylesource = new StreamSource(stylesheet);
        Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource);
        Source source = new DOMSource(document);
        Result outputTarget = new StreamResult(new File("output.csv"));
        transformer.transform(source, outputTarget);
    }

sytle.xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xsl:template match="Person">
    <xsl:value-of select="Name"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="Gender"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="Age"/>
    <xsl:text>&#10;</xsl:text>
  </xsl:template>
</xsl:stylesheet>

xmlData.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Document>
    <Person>
        <Name>Bob</Name>
        <Gender>m</Gender>
        <Age>19</Age>
    </Person>
</Document>

输出:

鲍勃,米,19

在我的 xsd 中,您可以看到我希望在 csv 文件中具有的一些限制:

 <xs:element maxOccurs="1" minOccurs="1" name="Name">
 <xs:element maxOccurs="1" minOccurs="1" name="Gender">
 <xs:element maxOccurs="1" minOccurs="0" name="Age">

我想要什么:

name,min,max,value
Bob,1,1,Name
m,1,1,Gender
19,0,1,Age

我对 xsl 还很陌生,不知道如何使用 xsd 以及在哪里使用。我看到一些关于在 xsl 文件中导入 xsd 的内容,但它对我来说不起作用。我希望我没有忘记一些重要信息。谢谢您的帮助。

java xml xslt xsd
1个回答
0
投票

完成此任务有一些可能性:

从 XSL 转换的角度来看,您的 XML 文件和 XML 架构文件是两个不同的输入文档。

  • XSLT 2.0 提供了对多个输入文档的全面支持,但这要么花费大量资金,要么功能有限(例如无法调用 Java 函数)。
  • 使用 XSLT 1.0,您需要将任一文档作为 DOM 节点参数传递给 XSLT,然后使用 XPath 调整所需的值。
© www.soinside.com 2019 - 2024. All rights reserved.