2016-06-17 68 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