簡體   English   中英

如何在xml中搜索元素?

[英]How to search an element in xml?

我需要在.xml文件中搜索元素。 它具有以下結構:

   <elements number="3">
     <contact>
       <name>PAUL</name>
       <code>A1</code>
     </contact>
     <contact>
       <name>LAURA</name>
       <code>A2</code>
     </contact>
     <contact>
       <name>JOHN</name>
       <code>A3</code>
     </contact>

我的解決方案是這樣的:

public static String readContactsList(String nameContact) {
       XMLInputFactory xmlif = null;
       XMLStreamReader xmlr = null;

       String contacts = "contacts.xml";

       try {
           xmlif = XMLInputFactory.newInstance();
           xmlr = xmlif.createXMLStreamReader(contacts, new FileInputStream(contacts)); 
            while (xmlr.hasNext()) { 
                switch (xmlr.getEventType()) { 
                case XMLStreamConstants.START_DOCUMENT: 
                    System.out.println("Start Read Doc " + contacts); 
                    break;

                case XMLStreamConstants.START_ELEMENT: 
                    System.out.println("Tag " + xmlr.getLocalName());
                    for (int i = 0; i < xmlr.getAttributeCount(); i++)
                        System.out.printf(" => attribut %s->%s%n", xmlr1.getAttributeLocalName(i), xmlr.getAttributeValue(i)); 
                    break;
                case XMLStreamConstants.END_ELEMENT: 
                    System.out.println("END-Tag " + xmlr.getLocalName()); 
                    break;
                case XMLStreamConstants.COMMENT:
                    System.out.println("// comment " + xmlr.getText()); 
                    break; 
                case XMLStreamConstants.CHARACTERS: 
                    if (xmlr.getText().trim().length() > 0) 
                    if (!xmlr.getText().equals(nameContact)) {
                        xmlr.next();
                    }
                    else 
                    System.out.println("-> " + xmlr.getText()); 
                    break;
            }
               xmlr.next();
            }
       } 
       catch (Exception e) {
           System.out.println("reader initialization error");
           System.out.println(e.getMessage()); 
           }
       return contacts;
   }

此方法收到一個聯系人的名稱(即“ LAURA”),並且應返回其代碼。 我想念的是如何滾動.xml文件以及如何訪問不同標簽的內容。

謝謝!

以下代碼(基於您的代碼)應該可以工作,但是請注意,如果您切換標記<name><code>的順序,它將失敗。

另外,請注意,您不會關閉流。 只需放入finally {xmlr.close();}一個finally {xmlr.close();}關閉流。

   public static String readContactsList(String nameContact) {
        boolean match = false;   
        XMLInputFactory xmlif = null;
        XMLStreamReader xmlr = null;

        String contacts = "contacts.xml";

        try {
            xmlif = XMLInputFactory.newInstance();
            xmlr = xmlif.createXMLStreamReader(contacts, new FileInputStream(contacts)); 
            while (xmlr.hasNext()) { 
                switch (xmlr.getEventType()) { 
                case XMLStreamConstants.START_DOCUMENT: 
                    System.out.println("Start Read Doc " + contacts); 
                    break;

                case XMLStreamConstants.START_ELEMENT: 
                    System.out.println("Tag " + xmlr.getLocalName());    
                    for (int i = 0; i < xmlr.getAttributeCount(); i++)
                        System.out.printf(" => attribut %s->%s%n", xmlr.getAttributeLocalName(i), xmlr.getAttributeValue(i));
                    break;

                case XMLStreamConstants.END_ELEMENT: 
                    System.out.println("END-Tag " + xmlr.getLocalName()); 
                    break;

                case XMLStreamConstants.COMMENT:
                    System.out.println("// comment " + xmlr.getText()); 
                    break; 

                case XMLStreamConstants.CHARACTERS: 
                    if (xmlr.getText().trim().length() > 0) {
                        if (!xmlr.getText().equals(nameContact)) {
                            System.out.println("-> " + xmlr.getText());

                            if (match) {
                                return xmlr.getText();
                            }
                        }
                        else {
                            System.out.println("-> " + xmlr.getText());

                            //This is just in case the name and the code be the same
                            if (match) {
                                return xmlr.getText();
                            }

                            match = true;
                        }
                    }
                    break;
                }
                xmlr.next();
            }
        } 
        catch (Exception e) {
            System.out.println("reader initialization error");
            System.out.println(e.getMessage()); 
        }
        return contacts;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM