我有一个 xml 文件,我想在其中填充另一个 xml 文件中的值。例如,如果我有 data.xml
:
<Data>
<Person>
<Name>neby</Name>
<Phone>
<Home>5553456789</Home>
<Mobile>5559879876</Mobile>
</Phone>
</Person>
</Data>
我想像这样填写test.xml
(数据取自上述文件):
<Test>
<Name>${Name}</Name>
<Number>${Home}</Number>
</Test>
在我的 Java 程序中,我在运行时创建 XML 文件。我想给出一个文件名,将其“传递”给 test.xml
,让 test.xml
读取它,然后填写文本。
有办法做到这一点吗?
<小时/>我做得正确吗?我得到的只是编码。没关系,我让它工作了。使用上面的 data.xml
。
MyXSL.xsl:
<?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:template match="/">
<xsl:for-each select="Data/Person">
<Test>
<Name><xsl:value-of select="Name"/></Name>
<Number><xsl:value-of select="Home"/></Number>
</Test>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
代码:
try {
File stylesheet = new File("MyXSL.xsl");
File dataFile = new File("data.xml");
Document document = DocumentBuilderFactory.newInstance()
.newDocumentBuilder().parse(dataFile);
StreamSource stylesource = new StreamSource(stylesheet);
Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource);
StringWriter stringWriter = new StringWriter();
transformer.transform(new DOMSource(document), new StreamResult(stringWriter));
System.out.println(stringWriter.toString());
} catch(Exception e){
e.printStackTrace();
}
输出:<?xml version="1.0" encoding="UTF-8"?>
我做错了什么?上面的代码有效。
最佳答案
创建 XSLT,然后执行类似的操作(非常简单,来自 Oracle java tuts):
// ...
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
// ...
public class Stylizer {
// ...
public static void main (String argv[]) {
// ...
try {
File stylesheet = new File(argv[0]);
File datafile = new File(argv[1]);
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(datafile);
// ...
StreamSource stylesource = new StreamSource(stylesheet);
Transformer transformer = Factory.newTransformer(stylesource);
}
}
}
创建 XSLT 的所有信息和分步指南,此示例应用程序是 here .
关于java - 动态地从另一个 XML 文件填充 XML 数据 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37885255/