2013-02-05 59 views
0

我試着用DOM解析下面的XML。我無法打印元素的值。任何人都可以幫我打印元素的值嗎?提前使用DOM解析XML並在java中打印

感謝

<tns:CustomerDetails xmlns:xe="http://www.w3.org/2001/04/xmlenc#" xmlns:xd="http://www.w3.org/2000/09/xmldsig#" xmlns:tns="http://abc.com/elements" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pf="http://abc.com/Service"> 
    <tns:CustomerId>360817</tns:CustomerId> 
    <tns:CustomerName>ABC Corp</tns:CustomerName> 
    <tns:PAN>awap</tns:PAN> 
    <tns:Timestamp>2010-05-20T12:20:19Z</tns:Timestamp> 
    <tns:RequestId>397</tns:RequestId> 
    <tns:PIN>1234</tns:PIN> 
</tns:CustomerDetails> 

我的代碼

 File infile = new File("D:\\Cust.xml"); 
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    Document doc = dBuilder.parse(infile); 
    doc.getDocumentElement().normalize(); 

    System.out.println("root of xml file " + 
        doc.getDocumentElement().getNodeName()); 
    System.out.println("=========================="); 

    NodeList list = doc.getElementsByTagName("CustomerDetails"); 
    System.out.println(list.getLength()); 
    Element name = doc.getElementById("CustomerId"); 
    if (name == null) { 
    System.out.println("There is no element with the ID "); 
    } else { 
    Text text = (Text)name.getFirstChild(); 
    System.out.println("The ID " + " locates the name " + text.getData()); 
    } 

我試圖與

Element name = doc.getElementById("tns:CustomerId"); 

也.. 我得到空當打印

+3

爲什麼不告訴你,你試過嗎? – home

+0

提示,Element類和所有其他Node類沒有有意義的'toString()'方法。 – jtahlborn

+0

發表您寫的代碼。 – Raedwald

回答

0

你」在這裏重新混合你的模型。 getElementById適用於具有由文檔的DTD標識爲屬性ID的屬性的元素,並且由於您的文檔沒有DTD,因此它永遠不會爲您提供任何有用的信息。

因爲你的文檔使用命名空間,你應該使用「NS」的方法來提取元素,幷包含在元素中的文本可以使用getTextContent

File infile = new File("D:\\Cust.xml"); 
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    // namespaces - DocumentBuilderFactory is *not* namespace aware by default 
    dbFactory.setNamespaceAware(true); 
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    Document doc = dBuilder.parse(infile); 
    doc.getDocumentElement().normalize(); 

    System.out.println("root of xml file " + 
        doc.getDocumentElement().getNodeName()); 
    System.out.println("=========================="); 

    NodeList list = doc.getElementsByTagNameNS(
     "http://abc.com/elements", "CustomerDetails"); 
    System.out.println(list.getLength()); 
    for(int i = 0; i < list.getLength(); i++) { 
    Element custDetails = (Element)list.item(i); 
    Element id = custDetails.getElementsByTagNameNS(
     "http://abc.com/elements", "CustomerId").item(0); 
    System.out.println("Customer ID: " + id.getTextContent()); 
    Element name = custDetails.getElementsByTagNameNS(
     "http://abc.com/elements", "CustomerName").item(0); 
    System.out.println("Customer Name: " + name.getTextContent()); 
    } 
+0

非常感謝伊恩和其他人幫助我。它的工作現在。 – Sharat