2013-01-22 38 views
0

我有一個任務在Eclipse中使用JDom解析XML文件。當我開始創建代碼時,我的代碼僅足以獲得具有標籤名稱模型的長度(多少個)節點。任務是更具體的,我需要獲得具有屬性類型的標籤名稱模型的節點的長度。我應該如何修改我的代碼才能得到結果?如何通過DOM獲取具有特定屬性的節點數

這是我的XML文件的一部分

<container> 
    <models> 
    <model id="FM1" type="BoQ"> 
     <meta 
     <phase phaseDesc="PRCR>SLCT>"/> 
    <domain domainCode="SPM.BOQ.RFP "/> 
    <levelOfDetail levelOfDetailCode="[4]"/> 
    </meta> 
</model> 

<model id="FM2" type="Object"> 
    <meta> 
    <phase phaseDesc="PRCR>SLCT> "/> 
    <domain domainCode="BIM"/> 
    <levelOfDetail levelOfDetailCode="[4] "/> 
    </meta> 
</model> 

<model id="FM3"> 
    <meta> 
    <phase phaseDesc="PRCR>SLCT>"/> 
    <domain domainCode="SPM.QTO"/> 
    <levelOfDetail levelOfDetailCode="[5]"/> 
    </meta> 
</model> 

<model id="FM4" type="BoQ"> 
    <meta> 
    <phase phaseDesc="PRCR>SLCT>"/> 
    <domain domainCode="TSM.TSC"/> 
    <levelOfDetail levelOfDetailCode="[3]"/> 
    </meta> 
    </model> 
</models> 

    <linkModels> 
    <linkModel id="LM1" type="QuantitySplit"> 
    <meta> 
    <info> 
     <i k="ModelName" v="Linkmodell"/> 
    </info> 
    <domain domainCode="LKM.QSP" domainDesc="Link Model"/> 
    </meta> 
    <models> 
    <model id="FM1"/> 
    <model id="FM2"/> 
    <model id="FM3"/> 
    <model id="FM4"/> 
    </models> 

</container> 

公共類XMLDOM {

public static void main(String[] args) { 

    Document xmlDoc = getDocument("./src/MMT_Angebot_Anfrage.xml"); 

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

    NodeList model = xmlDoc.getElementsByTagName("model"); 



    System.out.println("Number of Models " + 
      model.getLength()); 

    String elementPhase = "phase"; 
    String elementDomain = "domain"; 
    String elementLOD = "levelOfDetail"; 
    String attrPhase = "phaseCode"; 
    String attrDomain = "domainCode"; 
    String attrLOD = "levelOfDetailCode"; 

    getElementAndAttrib(model, elementPhase, elementDomain, elementLOD, attrPhase, attrDomain, attrLOD); 
} 

private static Document getDocument(String docString) { 

    try { 

     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 

     factory.setIgnoringComments(true); 
     factory.setIgnoringElementContentWhitespace(true); 
     factory.setValidating(true); 

     DocumentBuilder builder = factory.newDocumentBuilder(); 

     return builder.parse(new InputSource(docString)); 

    } 

    catch(Exception ex) { 

     System.out.println(ex.getMessage()); 

    } 


    return null; 
} 

private static void getElementAndAttrib(NodeList model, 
     String elementPhase, String elementDomain, String elementLOD, 
     String attrPhase, String attrDomain, String attrLOD) { 

    try { 

     for(int i=0; i < model.getLength(); i++){ 

      Node modelNode = model.item(i); 

      Element modelElement = (Element)modelNode; 


      NodeList phaseList = modelElement.getElementsByTagName(elementPhase); 

      NodeList domainList = modelElement.getElementsByTagName(elementDomain); 

      NodeList lodList = modelElement.getElementsByTagName(elementLOD); 

      Element phaseElement = (Element)phaseList.item(0); 

      Element domainElement = (Element)domainList.item(0); 

      Element lodElement = (Element)lodList.item(0); 

      NodeList elementList = phaseElement.getChildNodes(); 


       System.out.println("=================================================");    
       System.out.println(attrPhase + " : "+ phaseElement.getAttribute(attrPhase)); 
       System.out.println(attrDomain + " : "+ domainElement.getAttribute(attrDomain)); 
       System.out.println(attrLOD + " : "+ lodElement.getAttribute(attrLOD)); 

     } 
    } 

    catch(Exception ex) { 

     System.out.println(ex.getMessage()); 

    } 

    } 
} 
+0

我們如何告訴你,當你不向我們展示任何代碼時應該做什麼修改? –

+0

啊,是的..你是對的..我已經把代碼..謝謝你 – blackSweet

回答

1

你想數包含類型屬性<model>元素的數量?如果,那麼XPath是最適合的工具。

XPath xp = XPathFactory.newInstance().newXPath(); 

Double num = xp.evaluate("count(//model[@type])", doc, XPathConstants.NUMBER); 

順便說一句,你使用的是DOM,而不是JDOM。

+0

非常感謝你@四十二,它的工作..你只是讓我的一天!!。是的,我使用DOM而不是JDOM,感謝更正。 – blackSweet

相關問題