正如标题所说,我有一个 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> </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 的内容,但它对我来说不起作用。我希望我没有忘记一些重要信息。谢谢您的帮助。
完成此任务有一些可能性:
从 XSL 转换的角度来看,您的 XML 文件和 XML 架构文件是两个不同的输入文档。