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.