动态地从另一个XML文件中填充XML数据(Java)

时间:2016-06-17 15:27:30

标签: java xml

我有一个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"?>

我做错了什么?以上代码有效。

1 个答案:

答案 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