简体   繁体   English

根据用户输入创建XML文件

[英]Create XML file based on user input

Extreme Java newb...I am trying to create a program that will take user input and build an XML file based on input from the user. Extreme Java newb ...我正在尝试创建一个程序,该程序将接受用户输入并根据用户输入构建XML文件。 This file is used by a contact center platform to identify retail locations based on caller ID. 联络中心平台使用此文件根据呼叫者ID识别零售地点。 The XML structure looks like this: XML结构如下所示:

<StoreList>
    <Store str_callingnumber="1234567890">
        <Number>Store1000</Number>
        <Street>123 USA BLVD</Street>
        <City>Nashville, TN 37211</City>
        <WUGID>1234</WUGID>
    </Store>
</StoreList>

I want to prompt the user to enter the phone number, store number, street, city, and WUGID, but keep getting an error about cannot convert String to Node. 我想提示用户输入电话号码,商店号码,街道,城市和WUGID,但始终收到有关无法将String转换为Node的错误。 All of the other information I see on here is about parsing an existing XML file or creating one with DOM...but I haven't found any hints on creating one based on user input. 我在这里看到的所有其他信息都与解析现有XML文件或使用DOM创建文件有关...但是我没有发现有关基于用户输入创建文件的任何提示。 Here is my code thus far... 到目前为止,这是我的代码...

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();
  }
  }
  }

Thank you anyone/everyone for taking the time to help me understand. 谢谢任何人/每个人花时间帮助我理解。

You seemed to have the right idea to start with, but got off track somewhere. 您一开始似乎有正确的主意,但在某个地方偏离了轨道。

Basically, you're attempting to append a String value to a parent Node , but Node only accepts other Node s as it children. 基本上,您尝试将String值附加到父Node ,但是Node仅接受其他Node作为其子级。

Instead, you need to apply the String value to the textContent of the Element you've already created and append the Element to the parent 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);

Wash, rinse and repeat... 洗涤,漂洗并重复...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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