我最近正在开发一个天气应用程序,我希望将每个客户搜索保存在.xml格式的文件中。 . . See GUI Design Here . .
我在Java上使用以下代码在.xml文件上编写所需的元素,但问题是我无法附加下一个搜索并保存新搜索,如下所示:
<search>...NEW ELEMENTS (NEW SEARCH)...</seach>
当我点击“ForeCast”按钮时。
WeatherParser.java:
public void writeOnXML(String date, String[] term, String found, String geoNameID){
try {
XMLOutputFactory xMLOutputFactory = XMLOutputFactory.newFactory();
XMLStreamWriter xMLStreamWriter;
xMLStreamWriter = xMLOutputFactory
.createXMLStreamWriter(new FileOutputStream
("src\\main\\java\\stax\\weatherSearches.xml"));
//Create <weatherSearches></weatherSearches> (in weatherSearches.xml)
xMLStreamWriter.writeStartElement("weathersearches");
//Create <search></search> (weatherSearches.xml)
xMLStreamWriter.writeStartElement("search");
xMLStreamWriter.writeAttribute("date", date);
//Create <search><term>...</term></search> (weatherSearches.xml)
xMLStreamWriter.writeStartElement("term");
xMLStreamWriter.writeStartElement("temperature");
xMLStreamWriter.writeCharacters(term[0]);
xMLStreamWriter.writeEndElement(); //Close <Temperature>
xMLStreamWriter.writeStartElement("windDirection");
xMLStreamWriter.writeCharacters(term[1]);
xMLStreamWriter.writeEndElement(); //Close <WindDirection>
xMLStreamWriter.writeStartElement("windSpeed");
xMLStreamWriter.writeCharacters(term[2]);
xMLStreamWriter.writeEndElement(); //Close <WindSpeed>
xMLStreamWriter.writeStartElement("humidity");
xMLStreamWriter.writeCharacters(term[3]);
xMLStreamWriter.writeEndElement(); //Close <Humidity>
xMLStreamWriter.writeStartElement("pressure");
xMLStreamWriter.writeCharacters(term[4]);
xMLStreamWriter.writeEndElement(); //Close <Pressure>
xMLStreamWriter.writeStartElement("visibility");
xMLStreamWriter.writeCharacters(term[5]);
xMLStreamWriter.writeEndElement(); //Close <Visibility>
xMLStreamWriter.writeEndElement(); //close <term>
//Create <search><found></found></search> (weatherSearches.xml)
xMLStreamWriter.writeStartElement("found");
xMLStreamWriter.writeCharacters(found);
xMLStreamWriter.writeEndElement(); //Close <found>
//Create <search><geoNameID></geoNameID></search> (weatherSearches.xml)
xMLStreamWriter.writeStartElement("geoNameID");
xMLStreamWriter.writeCharacters(geoNameID);
xMLStreamWriter.writeEndElement(); //Close <geoNameID>
//Create <search></search> (weatherSearches.xml)
xMLStreamWriter.writeEndElement(); //Close <search>
xMLStreamWriter.writeEndElement(); //Close <weathersearches>
//xMLStreamWriter.flush();;
xMLStreamWriter.close();
}
catch (FileNotFoundException ex) {
loadErrorException(ex);
}
catch (XMLStreamException ex) {
loadErrorException(ex);
}
}
weatherSearches.xml:
<weathersearches>
<search date="Saturday - 14:00">
<term>
<temperature>11�C (52�F)</temperature>
<windDirection>Southerly</windDirection>
<windSpeed>18mph</windSpeed>
<humidity>97%</humidity>
<pressure>988mb</pressure>
<visibility>Poor</visibility>
</term>
<found>true</found>
<geoNameID>2656397</geoNameID>
</search>
</weathersearches>
元素<weathersearches><search><term><temperature>
中的未知符号是否会导致我出现任何错误,还是应该从那里删除?
答案 0 :(得分:0)
首先,你的输出看起来并不是一个有效的xml,它应该具有以下格式
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <Employees xmlns="https://www.journaldev.com/employee"> <Employee id="1"> <name>Pankaj</name> <age>29</age> <role>Java Developer</role> <gender>Male</gender> </Employee> <Employee id="2"> <name>Lisa</name> <age>35</age> <role>Manager</role> <gender>Female</gender> </Employee> </Employees>
尝试使用此代码,这会生成一个有效的xml。
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public class XMLWriterDOM {
public static void main(String[] args) {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
try {
dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.newDocument();
//add elements to Document
Element rootElement =
doc.createElementNS("https://www.journaldev.com/employee", "Employees");
//append root element to document
doc.appendChild(rootElement);
//append first child element to root element
rootElement.appendChild(getEmployee(doc, "1", "Pankaj", "29", "Java Developer", "Male"));
//append second child
rootElement.appendChild(getEmployee(doc, "2", "Lisa", "35", "Manager", "Female"));
//for output to file, console
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
//for pretty print
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource(doc);
//write to console or file
StreamResult console = new StreamResult(System.out);
StreamResult file = new StreamResult(new File("/Users/pankaj/emps.xml"));
//write data
transformer.transform(source, console);
transformer.transform(source, file);
System.out.println("DONE");
} catch (Exception e) {
e.printStackTrace();
}
}
private static Node getEmployee(Document doc, String id, String name, String age, String role,
String gender) {
Element employee = doc.createElement("Employee");
//set id attribute
employee.setAttribute("id", id);
//create name element
employee.appendChild(getEmployeeElements(doc, employee, "name", name));
//create age element
employee.appendChild(getEmployeeElements(doc, employee, "age", age));
//create role element
employee.appendChild(getEmployeeElements(doc, employee, "role", role));
//create gender element
employee.appendChild(getEmployeeElements(doc, employee, "gender", gender));
return employee;
}
//utility method to create text node
private static Node getEmployeeElements(Document doc, Element element, String name, String value) {
Element node = doc.createElement(name);
node.appendChild(doc.createTextNode(value));
return node;
}
}