2015-02-06 5 views
0

Я разбор файл XML, который имеет одну таблицу, как показано ниже:Передача целого числа в виде строки в Java

<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> 

Я хочу искать значение CID 301, для которого анс должен быть Oryx моментов, но я получаю Прожектор как ans, который является значением CID 201. Почему это может происходить ??? Мой Java-код:

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(); 
    } 
} 

В eElement2.getAttribute("name").equalsIgnoreCase() если я передать строку, то выход приходит, как и ожидалось, но если я передать целое число в виде строки, то она показывает анс предыдущий уровень в. Пожалуйста, помогите мне ...

+1

Я не совсем понимаю, что именно происходит. «Если я передаю Integer как String» ... это не имеет смысла. Строка выглядит как «шесть» или «6», это не должно иметь никакого значения, если только вы не сделали ошибку, когда-либо ее обрабатывали. – Stultuske

+0

Я хочу сказать, что eElement2.getTextContent(). Equals (""). Этот параметр принимает строковое значение. поэтому, когда я передаю любую строку внутри нее, она дает правильные значения. но я хочу передать целое число внутри, поэтому я передал String.valueOf (201), но он показывает значение предыдущей строки. –

+0

Теперь у меня есть вопрос –

ответ

0

Смотреть это ...

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(); 
    } 
}} 
+0

Большое спасибо –

0

Я просто хочу, чтобы указать, где ваша ошибка. Это ваш исходный код.

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> 

Порядок значений имени атрибута являются CID, name и value. В конце первого цикла тега row вы установите titlevalue = Spotlight. Затем в начале второго цикла тега row вы пропустите первый if, так как первый атрибут поля равен CID. Но программа войдет во второй if, потому что вы определяете name=CID и content=301, поэтому он отображает titlevalue = Прожектор.

Попробуйте это.

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()); 
     } 
    } 
} 
Смежные вопросы