2012-04-11 58 views
0
<PublicRecords> 
     <USBankruptcies> 
     <USBanktruptcy>...<USBankruptcy> 
     <CourtId>...</CourtId> 
     <USBanktruptcy>...<USBankruptcy> 
     <CourtId>...</CourtId> 
     </USBankruptcies>    
     <USTaxLiens> 
     <USTaxLien>...<USTaxLien> 
     <CourtId>...</CourtId> 
     <USTaxLien>...<USTaxLien> 
     <CourtId>...</CourtId> 
     </USTaxLiens>  
     <USLegalItems> 
     <USLegalItem><USLegalItem> 
     <CourtId></CourtId> 
      <USLegalItem><USLegalItem> 
     <CourtId></CourtId> 
     </USLegalItems>  
    </PubicRecords> 

我正在使用doc和xpath對象的組合來提取屬性和節點內容。如何解決名稱相同但父母不同的兩個節點?

NodeList bp = doc.getElementsByTagName("USBankruptcy"); 
    NodeList nl = doc.getElementsByTagName("CourtId"); 
    long itrBP; 
    for (itrBP = 0; itrBP < bp.getLength(); itrBP++) 
    { 

     Element docElement = (Element) bp.item(itrBP); 
     Element courtElement = (Element) nl.item(itrBP); 



     NodeList df = docElement.getElementsByTagName("DateFiled"); 
     if(df.getLength() > 0) 
     { 
      dateFiled = nullIfBlank(((Element)df.item(0)).getFirstChild().getTextContent()); 
      dateFiled = df.format(dateFiled); 
     } 

但是,當我說獲取標記名稱CourtID的元素,它會得到所有的CourtIDs,不只是USBankruptcy下的人。

有什麼方法可以指定父級?

我試過NodeList nl = doc.getElementsByTagName(「USBankruptcies/CourtId」);

它在運行時給了我一個dom錯誤。

+0

您可以使用帶表達式* // USBankruptcies/CourtId的XPath來獲取記錄。 – Phani 2012-04-11 17:30:27

+0

我如何循環訪存節點?我無法在網上找到這些示例 – roymustang86 2012-04-11 17:33:53

回答

1

而不是呼籲文檔getElementsByTagName("CourtId")方法,調用它的子元素(在你的情況下,<USBankruptcies>元素)。

NodeList bankruptcyNodes = doc.getElementsByTagName("USBankruptcies"); 
Element bankruptcyElement = (Element) bankruptcyNodes.item(0); 

NodeList bankruptcyCourtNodes = bankruptcyElement.getElementsByTagName("CourtId"); 
// etc... 
1

請在這裏找到代碼:

DocumentBuilderFactory domFactory = DocumentBuilderFactory 
      .newInstance(); 
    domFactory.setNamespaceAware(true); 
    DocumentBuilder builder = domFactory.newDocumentBuilder(); 
    Document doc = builder.parse("test.xml"); 
    XPath xpath = XPathFactory.newInstance().newXPath(); 
    XPathExpression expr = xpath.compile("*//USBankruptcies/CourtId"); 
    Object result = expr.evaluate(doc, XPathConstants.NODESET); 
    NodeList nodes = (NodeList) result; 
    for (int i = 0; i < nodes.getLength(); i++) { 
     System.out.println(nodes.item(i)); 
    } 
相關問題