2013-07-08 36 views
0

輸入XML如何將XML片段轉換爲字符串在Java中

<Employees> 
    <Employee> 
     <EmpId>101398</EmpId> 
     <Name>ABC</Name> 
    </Employee> 
    <Employee> 
     <EmpId>101399</EmpId> 
     <Name>XYZ</Name> 
    </Employee> 
<Employees> 


Output XML 
String : "<Employee><EmpId>101398</EmpId><Name>ABC</Name></Employee>" 

注:我不想使用XSLT。我會感謝你的回答。

+1

哪裏員工'101399'去?你想刪除該部分嗎?什麼是標準? –

+0

雅我希望每個員工的細節不同的字符串。示例String0包含第一個emp細節,String1包含第二個emp細節。感謝您的幫助。 –

回答

0
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.DocumentBuilder; 
import org.w3c.dom.Document; 
import org.w3c.dom.NodeList; 
import org.w3c.dom.Node; 
import org.w3c.dom.Element; 
import java.io.File; 

import java.io.ByteArrayInputStream; 
import java.io.InputStream; 
import java.io.StringWriter; 

import javax.xml.transform.OutputKeys; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 



public class XMLFormatter { 
    public static void main(String[] args) throws Exception{ 
     File fXmlFile = new File("src/a.xml"); 
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(fXmlFile); 

     doc.getDocumentElement().normalize(); 

     System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 

     NodeList nList = doc.getElementsByTagName("Employee"); 

     System.out.println("----------------------------"); 

     for (int temp = 0; temp < nList.getLength(); temp++) { 

      System.out.println(nodeToString(nList.item(temp))); 

     } 
    } 

    private static String nodeToString(Node node) { 
     StringWriter sw = new StringWriter(); 
     try { 
      Transformer t = TransformerFactory.newInstance().newTransformer(); 
      t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 
      t.setOutputProperty(OutputKeys.INDENT, "yes"); 
      t.transform(new DOMSource(node), new StreamResult(sw)); 
     } catch (TransformerException te) { 
      System.out.println("nodeToString Transformer Exception"); 
     } 
     return sw.toString(); 
     } 


} 

您的問題A.XML運行代碼包含您的XML deatils

+0

雖然這可能是正確的(我還沒有檢查過),但如果您能解釋解決方案背後的概念,它可能會使OP和未來的讀者受益匪淺。 –

+0

在我的情況下,有3個組件,中間一個從第一個獲取xml,我們處理該XML並將每個員工詳細信息放在一個Map中(Employee在上面的XML示例中),然後我們使用模板2 b XSLT或apache速度將其轉換爲第三個組件接受的JSON。我們將每個映射發送到模板。模板的主要目標是在未來使其可配置,即使我們更改XML,在JAVA層面上的邏輯應該不會有任何變化,只需要在模板中進行更改。希望你瞭解我的要求。 –

+0

在上面的例子中,如果我們可以在沒有對「Employee」標籤進行硬編碼的情況下破解XML,那將是非常好的。請告訴我是否有任何方法可以在沒有硬編碼的情況下完成。 謝謝你的解決方案:) –

相關問題