繁体   English   中英

根据用户输入创建XML文件

[英]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 ,你已经创建和附加ElementNode

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.

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