[英]Create XML file based on user input
Extreme Java newb ...我正在尝试创建一个程序,该程序将接受用户输入并根据用户输入构建XML文件。 联络中心平台使用此文件根据呼叫者ID识别零售地点。 XML结构如下所示:
<StoreList>
<Store str_callingnumber="1234567890">
<Number>Store1000</Number>
<Street>123 USA BLVD</Street>
<City>Nashville, TN 37211</City>
<WUGID>1234</WUGID>
</Store>
</StoreList>
我想提示用户输入电话号码,商店号码,街道,城市和WUGID,但始终收到有关无法将String转换为Node的错误。 我在这里看到的所有其他信息都与解析现有XML文件或使用DOM创建文件有关...但是我没有发现有关基于用户输入创建文件的任何提示。 到目前为止,这是我的代码...
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
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.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import java.io.File;
import java.util.Scanner;
public class CreateXmlFileDemo {
public static void main(String argv[]) {
Scanner sc = new Scanner(System.in);
try {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
// root element
Element rootElement = doc.createElement("StoreList");
doc.appendChild(rootElement);
// store element
Element store = doc.createElement("Store");
rootElement.appendChild(store);
// setting str_calling number attribute to store element
System.out.println("Enter the store phone number:");
String phone = sc.next();
Attr attr = doc.createAttribute("str_callingnumber");
attr.setValue(phone);
store.setAttributeNode(attr);
// store number element
Element storenumber = doc.createElement("Number");
System.out.println("Enter the store number:");
var number = sc.next();
store.appendChild(number);
//street address element
Element street = doc.createElement("Street");
System.out.println("Enter the street address:");
String address = sc.next();
street.appendChild(address);
Element zip = doc.createElement("City");
System.out.println("Enter the city, state, and ZIP code:");
String city = sc.next();
zip.appendChild(city);
Element wug = doc.createElement("WUGID");
System.out.println("Enter the WUGID:");
String wugid = sc.next();
wug.appendChild(wugid);
// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("C:\\cars.xml"));
transformer.transform(source, result);
// Output to console for testing
StreamResult consoleResult = new StreamResult(System.out);
transformer.transform(source, consoleResult);
} catch (Exception e) {
e.printStackTrace();
}
}
}
谢谢任何人/每个人花时间帮助我理解。
您一开始似乎有正确的主意,但在某个地方偏离了轨道。
基本上,您尝试将String
值附加到父Node
,但是Node
仅接受其他Node
作为其子级。
相反,你需要将申请String
值到textContent
的的Element
,你已经创建和附加Element
父Node
Element storenumber = doc.createElement("Number");
System.out.println("Enter the store number:");
String number = sc.next();
//var number = sc.next();
//store.appendChild(number);
storenumber.setTextContent(number);
store.appendChild(storenumber);
洗涤,漂洗并重复...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.