简体   繁体   中英

Passing integer as string in java

I am parsing an xml file which has one table as below:

<table name="categoryAttributeTable">
    <row>
        <field name="CID">201</field>
        <field name="name">page_title</field>
        <field name="value">Spotlight</field>
    </row>
    <row>
        <field name="CID">301</field>
        <field name="name">page_title</field>
        <field name="value">Oryx highlights</field>
    </row>
    <row>
        <field name="CID">501</field>
        <field name="name">page_title</field>
        <field name="value">Little Taster</field>
    </row>
</table>

I want to search value of CID 301 for which the ans should be Oryx highlights but i am getting Spotlight as ans which is the value of CID 201. Why this might be happening??? My java code is :

public static void main(String argv[]) {

    try {
        File fXmlFile = new File("/home/media.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile);

        doc.getDocumentElement().normalize();
        System.out.println("Root element :"+ doc.getDocumentElement().getNodeName());

        NodeList nList = doc.getElementsByTagName("table");
        System.out.println("----------------------------");

        String titlevalue=null;
        String cidvalue=null;
        String lidvalue=null;
        List a = new ArrayList();
        for (int temp = 0; temp < nList.getLength(); temp++) {

            Node nNode = nList.item(temp);
            if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                Element eElement = (Element) nNode;
                if(eElement.getAttribute("name").equalsIgnoreCase("categoryAttributeTable"))
                {
                    NodeList nList1 = eElement.getElementsByTagName("row");

                    for (int temp1 = 0; temp1 < nList1.getLength(); temp1++) {
                        Node nNode1 = nList1.item(temp1);
                        if (nNode1.getNodeType() == Node.ELEMENT_NODE) {
                            Element eElement1 = (Element) nNode1;
                     NodeList nList2 = eElement1.getElementsByTagName("field");
                     for (int temp2 = 0; temp2 < nList2.getLength(); temp2++) {

                         Node nNode2 = nList2.item(temp2);
                         if (nNode2.getNodeType() == Node.ELEMENT_NODE) {
                             Element eElement2 = (Element) nNode2;
                             if(eElement2.getAttribute("name").equalsIgnoreCase("value"))
                             {
                                titlevalue=eElement2.getTextContent();
                               // System.out.println(" Title value :: "+titlevalue);
                             }
                             if(eElement2.getAttribute("name").equalsIgnoreCase("CID") && (eElement2.getTextContent().equals(String.valueOf(301))))
                             {
                                 System.out.println(" Title value :: "+titlevalue);

                             }
                         }
                     }
                        }
                     }
                }
            }
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

In eElement2.getAttribute("name").equalsIgnoreCase() if i pass string then the output is coming as expected but if i pass integer as string then it is showing previous level's ans. Please help me...

See this...

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ReadXMLFile {public static void main(String argv[]) {

    try {
        File fXmlFile = new File("src/test.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile);

        doc.getDocumentElement().normalize();
        System.out.println("Root element :"+ doc.getDocumentElement().getNodeName());

        NodeList nList = doc.getElementsByTagName("table");
        System.out.println("----------------------------");

        String titlevalue=null;
        String cidvalue=null;
        String lidvalue=null;
  List<String> valueList=new ArrayList<String>();
  List<String> cidList=new ArrayList<String>();
        for (int temp = 0; temp < nList.getLength(); temp++) {

            Node nNode = nList.item(temp);
            if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                Element eElement = (Element) nNode;
                if(eElement.getAttribute("name").equalsIgnoreCase("categoryAttributeTable"))
                {
                    NodeList nList1 = eElement.getElementsByTagName("row");

                    for (int temp1 = 0; temp1 < nList1.getLength(); temp1++) {
                        Node nNode1 = nList1.item(temp1);
                        if (nNode1.getNodeType() == Node.ELEMENT_NODE) {
                            Element eElement1 = (Element) nNode1;
                     NodeList nList2 = eElement1.getElementsByTagName("field");
                     for (int temp2 = 0; temp2 < nList2.getLength(); temp2++) {

                         Node nNode2 = nList2.item(temp2);
                         if (nNode2.getNodeType() == Node.ELEMENT_NODE) {
                             Element eElement2 = (Element) nNode2;
                              String value1=null;
                              String value2=null;


                             if(eElement2.getAttribute("name").equalsIgnoreCase("value"))
                             {
                                 valueList.add(eElement2.getTextContent());
                             //   System.out.println(" Title value :: "+eElement2.getTextContent());
                             }

                             if(eElement2.getAttribute("name").equalsIgnoreCase("CID") && !(eElement2.getTextContent().equals("NULL")))
                             {
                              //   System.out.println(" XXXXXXXXXXX Title value :: "+eElement2.getTextContent());

                                cidList.add(eElement2.getTextContent());

                             }
                         }
                     }
                        }
                     }
                }
            }
        }

        for(int i=0;i<valueList.size();i++)
        {

            System.out.println("value :: "+ valueList.get(i)+" corresponding cid :: "+ cidList.get(i));
            //System.out.println("cid :: "+ cidList.get(i));
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}}

I just want to point out where your mistake is. This is your original code.

if (nNode2.getNodeType() == Node.ELEMENT_NODE) {
   Element eElement2 = (Element) nNode2;
   if(eElement2.getAttribute("name").equalsIgnoreCase("value")){
       titlevalue=eElement2.getTextContent();
   }
   if(eElement2.getAttribute("name").equalsIgnoreCase("CID") && (eElement2.getTextContent().equals(String.valueOf(301)))) {
       System.out.println(" Title value :: "+titlevalue);
   }
}

<row>
    <field name="CID">201</field>
    <field name="name">page_title</field>
    <field name="value">Spotlight</field>
</row>
<row>
    <field name="CID">301</field>
    <field name="name">page_title</field>
    <field name="value">Oryx highlights</field>
</row>

The order of the values of name attribute are CID , name and value . In the end of first loop of row tag, you will set titlevalue = Spotlight. Then in the beginning of second loop of row tag, you will skip the first if as the first field attribute is equal to CID . But the program will enter the second if because you define name=CID and the content=301 , hence it displays titlevalue = Spotlight.

Try this.

Element eElement1 = (Element) nNode1;
NodeList nList2 = eElement1.getElementsByTagName("field");

for (int temp2 = 0; temp2 < nList2.getLength(); temp2++) {
    Node nNode2 = nList2.item(temp2);

    if (nNode2.getNodeType() == Node.ELEMENT_NODE) {
        Element eElement2 = (Element) nNode2;
        String nameattr = eElement2.getAttribute("name");

        if (nameattr.equalsIgnoreCase("CID")) {
            titlevalue = eElement2.getTextContent();

            // If CID != 301, skip the whole loop.          
            if (!titlevalue.equalsIgnoreCase("301")) {
                break;
            }
        }
        else if (nameattr.equalsIgnoreCase("value")) {
            System.out.println("value: " + eElement2.getTextContent());
        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM