gpt4 book ai didi

java - 使用 Java 转换 XML 文件

转载 作者:行者123 更新时间:2023-12-01 06:23:58 26 4
gpt4 key购买 nike

我想借助java代码将一个xml转换为另一个xml。我想给出一个 xml 作为输入文件,并期望另一个 xml 文件作为输出。我们如何在java的帮助下完成这件事呢?有人可以给我建议吗?

Input.xml

<Order OrderNo=”1234567890”>

<OrderLines>

<OrderLine PrimeLineNo=”1” SubLineNo=”1”/>

<OrderLine PrimeLineNo=”2” SubLineNo=”1”/>

</OrderLines>

</Order>

output.xml 文件 我需要像这样输出这个文件

<Order OrderName="1234567890">

<OrderLines MaxOrderNumbers=”2”>

<OrderLine LineNumber="1" SubLineNumber="1"/>

<OrderLine LineNumber ="2" SubLineNumber ="1"/>

</OrderLines>

</Order>

但是我已经在java的帮助下尝试了下面的代码。

public class XmlToXml {

public static void main(String[] args) {

final String xmlStr ="<Order OrderNo=\"1234567890\"><OrderLines><OrderLine PrimeLineNo=\"1\" SubLineNo=\"1\"/><OrderLine PrimeLineNo=\"2\" SubLineNo=\"1\"/></OrderLines></Order>";

Document doc = convertStringToDocument(xmlStr);

String str = convertDocumentToString(doc);

System.out.println(str);
}

private static String convertDocumentToString(Document doc) {

TransformerFactory tf = TransformerFactory.newInstance();

Transformer transformer;
try {
transformer = tf.newTransformer();

System.out.println(transformer.getParameter("xmlStr"));

StringWriter writer = new StringWriter();

writer.append("MaxOrderNumbers");

transformer.transform(new DOMSource(doc), new StreamResult(writer));

String output = writer.getBuffer().toString();

return output;

} catch (TransformerException e) {

e.printStackTrace();
}

return null;
}

private static Document convertStringToDocument(String xmlStr) {

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
try
{
builder = factory.newDocumentBuilder();

Document doc = builder.parse(new InputSource( new StringReader( xmlStr ) ) );

return doc;

} catch (Exception e) {

e.printStackTrace();
}
return null;
}
}

最佳答案

解决这个问题的方法是在 XSLT 中定义转换规则。

您需要一条规则,默认情况下复制内容不变:

<xsl:template match="*|@*">
<xsl:copy>
<xsl:apply-templates select="*|@*"/>
</xsl:copy>
</xsl:template>

然后您需要进一步的规则来定义您想要进行的更改:

<xsl:template match="@OrderNo">
<xsl:attribute name="OrderName"><xsl:value-of select="."/></xsl:attribute>
</xsl:template>

对于其他重命名规则类似,加上

<xsl:template match="OrderLines">
<OrderLines MaxOrderLines="{count(*)}">
<xsl:apply-templates select="*|@*"/>
</OrderLines>
</xsl:template>

然后,将这些规则组装到样式表中后,您可以使用与您已经完成的操作非常相似的代码从 Java 代码运行转换:

TransformerFactory tf = TransformerFactory.newInstance();
Templates t = tf.newTemplates(new StreamSource(new File("stylesheet.xsl")));
StringWriter writer = new StringWriter();
t.newTransformer().transform(
new StreamSource(new File("input.xml")),
new StreamResult(writer));

关于java - 使用 Java 转换 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25678815/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com