2016-06-17 71 views
0

我有一个xml文件,我想从另一个xml文件填充值。举例来说,如果我有data.xml从另一个XML文件动态填充XML数据(Java)

<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"?>

我在做什么错? 上面的代码有效。

+1

这就是XSLT的诞生。 – duffymo

+0

从来没有听说过XSLT。我会查找它。如果你可以给一个指导,这也会有所帮助。谢谢回复! – Vylic

+0

Google it。它是XML风格的转换。将一个流转换为另一个流。 – duffymo

回答

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

+0

谢谢,你能看看我在OP中的代码吗?我没有得到预期的输出。 – Vylic

+0

没关系,让它工作!谢谢你的一切! – Vylic

+0

嗨,对不起,我出去了:)我很高兴它为你工作 – Hrabosch