2014-07-30 2 views
0

EDIT: проблема найдена. Я добавлял элементы в документ, когда он должен был быть добавлен в «rootElement». Работаю сейчас. Если у вас есть какие-либо дополнительные предложения относительно того, как лучше сделать мой код, пожалуйста, дайте мне знатьПытается создать XML-файл в Java - Получение DOMException: HIERARCHY_REQUEST_ERR

В следующем коде я пытаюсь как вручную внести запись в файл XML, так и немного упростить ее бит с функцией.

Я получаю сообщение об ошибке «HIERARCHY_REQUEST_ERR». Я знаю, что проблема связана со следующим кодом в нижней части моей функции, но я не знаю, как с этим бороться. Когда я избавлюсь от doc.appendChild (staff), я избавлюсь от проблемы, но, очевидно, не добавляет новую запись.

Элемент штата = doc.createElement («Персонал»); doc.appendChild (штат);

Спасибо за внимание!

import java.io.File; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerException; 
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; 
public class createXMLfile { 

public static void main(String [] args) throws ParserConfigurationException, TransformerException{ 

String address = "/home/leor/workspace/Test/Files/src/outputFile.xml"; 


DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
Document doc = builder.newDocument(); 

Element rootElement = doc.createElement("Company"); 
doc.appendChild(rootElement); 

// EMPLOYEE #1 

//-----------------------------------------------------------// 


Element staff = doc.createElement("Staff"); 
rootElement.appendChild(staff); 

staff.setAttribute("id", "1"); 

Element firstName = doc.createElement("First_Name"); 
firstName.appendChild(doc.createTextNode("John")); 
staff.appendChild(firstName); 

Element lastName = doc.createElement("Last_Name"); 
lastName.appendChild(doc.createTextNode("Smith")); 
staff.appendChild(lastName); 

Element salary = doc.createElement("Salary"); 
salary.appendChild(doc.createTextNode("120,000")); 
staff.appendChild(salary); 

//-----------------------------------------------------------// 

createNewEntry(doc, "2", "Leo", "Benner", "90,000"); 
createNewEntry(doc, "3", "Sarah", "Gordon", "75,000"); 
createNewEntry(doc, "4", "Scott", "Jones", "55,000"); 

//-----------------------------------------------------------// 

TransformerFactory f = TransformerFactory.newInstance(); 
Transformer tf = f.newTransformer(); 
DOMSource source = new DOMSource(doc); 

StreamResult r = new StreamResult(new File(address)); 

tf.transform(source, r); 

System.out.println("File created."); 

    } 

//-----------------------------------------------------------// 


public static void createNewEntry(Document doc, String id, String fName, String lName, String sal){ 

    Element staff = doc.createElement("Staff"); 
    doc.appendChild(staff); 

    staff.setAttribute("id", id); 

    Element firstName = doc.createElement("First_Name"); 
    firstName.appendChild(doc.createTextNode(fName)); 
    staff.appendChild(firstName); 

    Element lastName = doc.createElement("Last_Name"); 
    lastName.appendChild(doc.createTextNode(lName)); 
    staff.appendChild(lastName); 

    Element salary = doc.createElement("Salary"); 
    salary.appendChild(doc.createTextNode(sal)); 
    staff.appendChild(salary); 

    } 

} 

ответ

1

Изменить эту функцию, чтобы:

public static void createNewEntry(Document doc, Element root, String id, String fName, String lName, String sal){ 

    Element staff = doc.createElement("Staff"); 
    root.appendChild(staff); 

    staff.setAttribute("id", id); 

    Element firstName = doc.createElement("First_Name"); 
    firstName.appendChild(doc.createTextNode(fName)); 
    staff.appendChild(firstName); 

    Element lastName = doc.createElement("Last_Name"); 
    lastName.appendChild(doc.createTextNode(lName)); 
    staff.appendChild(lastName); 

    Element salary = doc.createElement("Salary"); 
    salary.appendChild(doc.createTextNode(sal)); 
    staff.appendChild(salary); 

    } 

И создать такие элементы, как:

Element rootElement = doc.createElement("Company"); 
doc.appendChild(rootElement); 


createNewEntry(doc, rootElement, "1", "John", "Smith", "120,000"); 
createNewEntry(doc, rootElement, "2", "Leo", "Benner", "90,000"); 
createNewEntry(doc, rootElement, "3", "Sarah", "Gordon", "75,000"); 
createNewEntry(doc, rootElement, "4", "Scott", "Jones", "55,000");