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

标签 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 文件。我想给出一个文件名,将其“传递”给 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/

相关文章:

xml - 如何使用 XPath 轴编写与命名空间无关的 XPath 查询

Java:如何编写泛型方法?

java - Collections.sort() 和通过添加到 TreeSet 中获取排序集合之间的区别?

javascript - XML 声明中的 NativeScript 全局事件处理程序?

java - Apache Tiles 与 Spring MVC 给出错误 - 无法实例化 WebApplicationInitializer 类

javascript - 在一个标记中包含多个信息的 Google map

java - 为什么我的数字验证方法无法将某些字符串捕获为无效数字?

java - 如何在Java中获取非英语单词?

java - PhantomReference 能否阻止其引用对象进行内存回收?

c++ - xalan 和 xerces 的多个版本