问题
I am very new for coding, can any one please help me in correcting my code. I need to read XML Data and store the data in text file. Each value must be separated by comma and once the data for one record is read it need to go for next line and execute another record.
Sample XML file:
<?xml version="1.0" encoding="UTF-8"?>
<xml_tool xmlns:md="http://www.example.com/XT/1.0/">
<md:header>
<md:application_version>1.0</md:application_version>
<md:export_date>19-04-2012</md:export_date>
<md:export_time>14:55</md:export_time>
<md:export_user>USER01</md:export_user>
</md:header>
<md:table table_name="CUSTOMER" key="customer number" record_count="2" column_count="5">
<md:record>
<md:column name="customer_number">123456</md:column>
<md:column name="reg_date">01-04-2012</md:column>
<md:column name="customer_name">Test Customer</md:column>
<md:column name="customer_type">Normal </md:column>
<md:column name="comments">This is a test record</md:column>
</md:record>
<md:record>
<md:column name="customer_number">555111</md:column>
<md:column name="reg_date">02-04-2012</md:column>
<md:column name="customer_name">Test Customer</md:column>
<md:column name="customer_type"> </md:column>
<md:column name="comments">This is a test record</md:column>
</md:record>
</md:table>
</xml_tool
My code:
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.*;
public class ParseXML {
public static void main(String argv[])throws IOException {
try {
BufferedWriter writer = new BufferedWriter(new FileWriter("results/staff.txt"));
File fXmlFile = new File("data/hardware-info.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("md:record");
for (int i = 0; i < nList.getLength(); i++)
{
Node node = nList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE)
{
Element eElement = (Element) node;
if(eElement.hasChildNodes())
{
NodeList nl = node.getChildNodes();
for(int j=0; j<nl.getLength(); j++)
{
Node nd = nl.item(j);
String name= nd.getTextContent();
f (name != null && !name.trim().equals("")) {
System.out.print(name.trim()+",");
//System.out.print(" ");
writer.write(nd.getTextContent().trim() + " ");
}
}
System.out.println("");
writer.write("\n");
}
} }
writer.close();
}
catch (Exception e) {
e.printStackTrace(); } }
@SuppressWarnings("unused")
private static String getTagValue(String sTag, Element eElement)
{
NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
Node nValue = (Node) nlList.item(0);
return nValue.getNodeValue();
}
}
Output for this code:
123456,01-04-2012,Test Customer,Normal,,This is a test record,
555111,02-04-2012,Test Customer,This is a test record,
Expected output:
123456,01-04-2012,Test Customer,Normal,This is a test record
555111,02-04-2012,Test Customer, ,This is a test record
回答1:
change if (name != null)
to
if (name != null && !name.trim().equals(""))
回答2:
I suspect this is your problem:
String name = nd.getTextContent();
if (name != null)
You might instead want:
String name = nd.getTextContent();
if (name != null && name.length() > 0)
来源:https://stackoverflow.com/questions/11790153/reading-xml-data-into-text-file