0

我正在尝试使用 Dom 解析器解析以下 xml 文件。但我得到了前三个标签(日期、早餐、午餐)。如何获取所有日期、早餐和午餐标签。

-<Content>
  <Date>2/4/2013</Date>
  <Breakfast>WG Biscuit, Grits, sausage patty, fruit, juice, milk</Breakfast>
  <Lunch>Chicken tenders with sauce, WG affle stick and syrup, carrots-MC, romaine garden salad, fruit, juice, milk</Lunch>
  <Date>2/5/2013</Date>
  <Breakfast>grilleed cheese sandich, grits, fruit, juice, milk</Breakfast>
  <Lunch>meat sauce w/WG pasta, green beans, caesar salad, WW garlic toast, fruit, juice, milk</Lunch>
  <Date>2/6/2013</Date>
  <Breakfast>WG biscuit with chicken patty, fruit, juice, milk</Breakfast>
  <Lunch>WG pizza, spinach salad, WKcorn, fruit, juice, milk</Lunch>
  <Date>2/7/2013</Date>
  <Breakfast>WG french toast sticks (4), sausage links, fruit, juice, milk</Breakfast>
  <Lunch>salisbury steak, black eyed peas, creamed potatoes with gravy, greens-MC, spring mixed salad, WW cornbread, fruit, juice, milk</Lunch>
  <Date>2/8/2013</Date>
  <Breakfast>WG breakfast bagel, yogurt, fruit, juice, milk</Breakfast>
  <Lunch>BBQ rib portion on WG bun, sweet potato fries or yams, romaine garden salad, fruit, juice, milk</Lunch>
  <Date>2/11/2013</Date>
  <Breakfast>Mardi Gras Holiday - No School</Breakfast>
  <Lunch/>
</Content> 

我正在使用以下代码:

StringBuilder sb=new StringBuilder(arg0[0]);
             String findlink=sb.toString();
             try{
                    HttpClient client=new DefaultHttpClient();
                    HttpGet request=new HttpGet();
                    request.setURI(new URI(findlink)) ;

                    HttpResponse response=client.execute(request);
                    //et.setText("its working"); 
                 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

                 DocumentBuilder Builder=factory.newDocumentBuilder();
                 dom=Builder.parse(response.getEntity().getContent());
                 dom.getDocumentElement().normalize();
                  nList5=dom.getElementsByTagName("Content");
                    for(int temp=0;temp<nList5.getLength();temp++)
                    {
                         Node nNode=nList5.item(temp);
                         if(nNode.getNodeType()==Node.ELEMENT_NODE)
                         {
                                    Element eElement=(Element)nNode;
                                    String  base1 =getTagValue("Date",eElement);
                                    Date.add(base1);
                                    String  base2 =getTagValue("Breakfast",eElement);
                                    Breakfast.add(base2);
                                    String  base3 =getTagValue("Lunch",eElement);
                                    Lunch.add(base3);


                          }
                    }

如何解析内容下的所有标签。帮我做这件事。

4

1 回答 1

0

首先确保您的 XML 数据已格式化,我的意思是它不应错过任何关闭标签,并且大括号<>使用任何在线XML formator来验证您的 XML。在此之后尝试以下代码。

XML解析器函数

/**
 * Getting XML DOM element
 * 
 * @param XML
 *            string
 * */
public Document getDomElement(String xml) {
    Document doc = null;
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

    dbf.setCoalescing(true);
    try {

        DocumentBuilder db = dbf.newDocumentBuilder();

        InputSource is = new InputSource();
        is.setCharacterStream(new StringReader(xml));
        doc = db.parse(is);

    } catch (ParserConfigurationException e) {
        Log.e("Error: ", e.getMessage());
        return null;
    } catch (SAXException e) {
        Log.e("Error: ", e.getMessage());
        return null;
    } catch (IOException e) {
        Log.e("Error: ", e.getMessage());
        return null;
    }

    return doc;

}

获取节点值。

/**
 * Getting node value
 * 
 * @param Element
 *            node
 * @param key
 *            string
 * */
public String getValue(Element item, String str) {
    NodeList n = item.getElementsByTagName(str);
    return this.getElementValue(n.item(0));
}

}

像这样调用上面的函数

            Document doc = parser.getDomElement(yourXMLString);
            NodeList nl = doc.getElementsByTagName("Content");

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

                Element e = (Element) nl.item(i);

                // Get your Data Here

                                String  base1 =getTagValue("Date",eElement);
                                Date.add(base1);
                                String  base2 =getTagValue("Breakfast",eElement);
                                Breakfast.add(base2);
                                String  base3 =getTagValue("Lunch",eElement);
                                Lunch.add(base3);

        }

像这样更改您的 XML

<Contents>
<content>
<Date>2/4/2013
</Date>
<Breakfast>WG Biscuit, Grits, sausage patty, fruit, juice, milk
</Breakfast>
<Lunch>Chicken tenders with sauce, WG affle stick and syrup, carrots-MC, romaine garden salad, fruit, juice, milk
</Lunch>
</content>
<content>
<Date>2/5/2013
</Date>
<Breakfast>grilleed cheese sandich, grits, fruit, juice, milk
</Breakfast>
<Lunch>meat sauce w/WG pasta, green beans, caesar salad, WW garlic toast, fruit, juice, milk
</Lunch>
</content>
<content>
<Date>2/6/2013
</Date>
<Breakfast>WG biscuit with chicken patty, fruit, juice, milk
</Breakfast>
<Lunch>WG pizza, spinach salad, WKcorn, fruit, juice, milk
</Lunch>
</content>
<content>
<Date>2/7/2013
</Date>
<Breakfast>WG french toast sticks (4), sausage links, fruit, juice, milk
</Breakfast>
<Lunch>salisbury steak, black eyed peas, creamed potatoes with gravy, greens-MC, spring mixed salad, WW cornbread, fruit, juice, milk
</Lunch>
</content>
<content>
<Date>2/8/2013
</Date>
<Breakfast>WG breakfast bagel, yogurt, fruit, juice, milk
</Breakfast>
<Lunch>BBQ rib portion on WG bun, sweet potato fries or yams, romaine garden salad, fruit, juice, milk
</Lunch>
</content>
<content>
<Date>2/11/2013
</Date>
<Breakfast>Mardi Gras Holiday - No School
</Breakfast>
<Lunch />
</content>
</Contents>

并称之为NodeList nl = doc.getElementsByTagName("Content");

于 2013-02-05T07:21:20.537 回答