简体   繁体   English

在Java中将整数作为字符串传递

[英]Passing integer as string in java

I am parsing an xml file which has one table as below: 我正在解析一个具有如下表的xml文件:

<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??? 我想搜索CID 301的值,其ans应该为Oryx高亮显示,但我将Spotlight作为ans得到的是CID 201的值。为什么会发生这种情况? My java code is : 我的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();
    }
}

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. eElement2.getAttribute("name").equalsIgnoreCase()如果我传递字符串,则输出按预期进行,但如果我传递整数作为字符串,则显示上一级的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 . name属性值的顺序为CIDnamevalue In the end of first loop of row tag, you will set titlevalue = Spotlight. 在第一个row标记循环的末尾,您将设置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 . 然后,在第二个row标记循环的开头, if第一个字段属性等于CID ,则将跳过第一个循环。 But the program will enter the second if because you define name=CID and the content=301 , hence it displays titlevalue = Spotlight. 但是, if由于定义name=CIDcontent=301 ,则程序将输入第二个,因此它将显示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());
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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