我有一个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文件。我想给一个文件名,&#34;传递&#34;它到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"?>
我做错了什么?以上代码有效。
答案 0 :(得分:2)
创建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。