关于用dom连续读和写xml 重复换行的问题

luojigao 2018-05-31 04:28:20
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Flights>




<Flight id="1">





<flightNumber>ABC1</flightNumber>





<airline>Lufthansa</airline>





<airplaneType>A380</airplaneType>





<terminal>1</terminal>





<gate>G</gate>





<departureAirport>MUC</departureAirport>





<arrivalAirport>FAO</arrivalAirport>





<departureDateTime>2018-05-10 18:00</departureDateTime>





<arrivalDateTime>2018-05-10 19:00</arrivalDateTime>





<seat>13A</seat>





</Flight>





<Flight id="2">



<flightNumber>ABC2</flightNumber>



<airline>Lufthansa</airline>



<airplaneType>A320</airplaneType>



<terminal>2</terminal>



<gate>C</gate>



<departureAirport>FAO</departureAirport>



<arrivalAirport>MUC</arrivalAirport>



<departureDateTime>2018-05-11 18:00</departureDateTime>



<arrivalDateTime>2018-05-11 19:00</arrivalDateTime>



<seat>13A</seat>



</Flight>



<Flight id="3">


<flightNumber>ABC2</flightNumber>


<airline>Lufthansa</airline>


<airplaneType>A320</airplaneType>


<terminal>2</terminal>


<gate>C</gate>


<departureAirport>FAO</departureAirport>


<arrivalAirport>MUC</arrivalAirport>


<departureDateTime>2018-05-11 18:00</departureDateTime>


<arrivalDateTime>2018-05-11 19:00</arrivalDateTime>


<seat>13A</seat>


</Flight>


<Flight id="4">

<flightNumber>ABC2</flightNumber>

<airline>Lufthansa</airline>

<airplaneType>A320</airplaneType>

<terminal>2</terminal>

<gate>C</gate>

<departureAirport>FAO</departureAirport>

<arrivalAirport>MUC</arrivalAirport>

<departureDateTime>2018-05-11 18:00</departureDateTime>

<arrivalDateTime>2018-05-11 19:00</arrivalDateTime>

<seat>13A</seat>

</Flight>

<Flight id="5">
<flightNumber>ABC2</flightNumber>
<airline>Lufthansa</airline>
<airplaneType>A320</airplaneType>
<terminal>2</terminal>
<gate>C</gate>
<departureAirport>FAO</departureAirport>
<arrivalAirport>MUC</arrivalAirport>
<departureDateTime>2018-05-11 18:00</departureDateTime>
<arrivalDateTime>2018-05-11 19:00</arrivalDateTime>
<seat>13A</seat>
</Flight>
</Flights>


以上是我的xml 最下面是刚刚写入的 (也是正常的换行) 但是之前的是多次读写后 每一次读写都换一次行(所以第一个换行最多 然后依次递减)
虽然有很多空格 但是对于我的parse没有问题
我的问题是如何避免这样情况 然后读写以后也是一个看起来很正常的树形结构 就是想看起来正常一些
谢谢大家
...全文
1033 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
luojigao 2018-06-02
  • 打赏
  • 举报
回复
求回答
luojigao 2018-05-31
  • 打赏
  • 举报
回复
然后是我读写的代码
public class FlightData {
	protected Document documentAll = null;
	protected Document documentUser = null;
	protected NodeList flightListAll;
	protected NodeList flightListUser;
	private int counter;
    DateTimeFormatter date = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    DateTimeFormatter time = DateTimeFormatter.ofPattern("HH:mm");

	
	public FlightData () {
		counter = 0;
		DocumentBuilderFactory dbf;
		DocumentBuilder db;
		dbf = DocumentBuilderFactory.newInstance();
		try {
			db = dbf.newDocumentBuilder();
			documentAll = db.parse("./app/FlightApp/TestData.xml");
			flightListAll = documentAll.getElementsByTagName("Flight");
			documentUser = db.parse("./app/FlightApp/DataUser.xml");
			flightListUser = documentUser.getElementsByTagName("Flight");
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
	
	/**
	 * get the flight object with the index in the xml database
	 * @param the index of the flight that you want to get
	 * @return the flight that matches the index
	   */
	private Flight getFlight(NodeList nodelist, int index) {
		Node flight = nodelist.item(index);
		NodeList childNodes = flight.getChildNodes();
		String flightNumber = childNodes.item(1).getFirstChild().getNodeValue();
	    String airline = childNodes.item(3).getFirstChild().getNodeValue();
	    String airplaneType = childNodes.item(5).getFirstChild().getNodeValue();
	    String terminal = childNodes.item(7).getFirstChild().getNodeValue();
	    String gate = childNodes.item(9).getFirstChild().getNodeValue();
	    String departureAirport = childNodes.item(11).getFirstChild().getNodeValue();
	    String arrivalAirport = childNodes.item(13).getFirstChild().getNodeValue();
	    String departureDateTime = childNodes.item(15).getFirstChild().getNodeValue();
	    String arrivalDateTime = childNodes.item(17).getFirstChild().getNodeValue();
	    String seat = childNodes.item(19).getFirstChild().getNodeValue();
	    Flight f = new Flight(flightNumber, airline, airplaneType, terminal, gate, departureAirport, arrivalAirport, seat, departureDateTime, arrivalDateTime);
//	    System.out.println(flightNumber);
//	    System.out.println(airline);
//	    System.out.println(airplaneType);
//	    System.out.println(terminal);
//	    System.out.println(gate);
//	    System.out.println(departureAirport);
//	    System.out.println(arrivalAirport);
//	    System.out.println(departureDateTime);
//	    System.out.println(arrivalDateTime);
//	    System.out.println(seat);
	    return  f;
	}
	
	/**
	 * get the all the flight
	 * @return all the flights in a List
	   */
	public List<Flight> getFlightsAll() {
		return getFlights(flightListAll);
	}
	
	/**
	 * get the user's flight 
	 * @return the user' flights in a List
	   */
	public List<Flight> getFlightsUser() {
		return getFlights(flightListUser);
	}

	private List<Flight> getFlights(NodeList nodelist) {
		List<Flight> flights = new ArrayList<Flight>();
		for (int i = 0; i < nodelist.getLength(); i++) {
			flights.add(getFlight(nodelist, i));
		}
		return flights;
	}
	
	/**
	 * @return the length of the list of all flights
	 */
	public int getSizeAllFlights () {
		return flightListAll.getLength();
	}
	
	/**
	 * @return the length of the list of user's flights
	 */
	public int getSizeUserFlights () {
		return flightListUser.getLength();
	}
	
	public void addNodeToUserFlights() {
		//TODO delete
		Flight a = new Flight("ABC2", "Lufthansa", "A320", "2", "C", "FAO", "MUC", "13A", "2018-05-11 18:00", "2018-05-11 19:00"); 
		addNode("./app/FlightApp/DataUser.xml", a, "Flights", documentUser);
	}
	
	private void addNode(String fileName, Flight flight, String fatherNodeName, Document document) { 
		assert(document.equals(flightListUser));
		try {  
            Element newflight = document.createElement("Flight");
            counter++;
            newflight.setAttribute("id", getSizeUserFlights() + counter + "");  
    		Element flightNumber = document.createElement("flightNumber");
    		Element airline = document.createElement("airline");
    		Element airplaneType = document.createElement("airplaneType");
    		Element terminal = document.createElement("terminal");
    		Element gate = document.createElement("gate");
    		Element departureAirport = document.createElement("departureAirport");
    		Element arrivalAirport = document.createElement("arrivalAirport");
    		Element departureDateTime = document.createElement("departureDateTime");
    		Element arrivalDateTime = document.createElement("arrivalDateTime");
    		Element seat = document.createElement("seat");
    		flightNumber.setTextContent(flight.getFlightNumber());
    		airline.setTextContent(flight.getAirline());
    		airplaneType.setTextContent(flight.getAirplaneType());
    		terminal.setTextContent(flight.getTerminal());
    		gate.setTextContent(flight.getGate());
    		departureAirport.setTextContent(flight.getDepartureAirport());
    		arrivalAirport.setTextContent(flight.getArrivalAirport());
    		departureDateTime.setTextContent(flight.getDepartureDateTime().format(date) + " " + flight.getDepartureDateTime().format(time));
    		arrivalDateTime.setTextContent(flight.getArrivalDateTime().format(date) + " " + flight.getArrivalDateTime().format(time));
    		seat.setTextContent(flight.getSeat());
    		newflight.appendChild(flightNumber);
    		newflight.appendChild(airline);
    		newflight.appendChild(airplaneType);
    		newflight.appendChild(terminal);
    		newflight.appendChild(gate);
    		newflight.appendChild(departureAirport);
    		newflight.appendChild(arrivalAirport);
    		newflight.appendChild(departureDateTime);
    		newflight.appendChild(arrivalDateTime);
    		newflight.appendChild(seat);
            Element fatherElement = (Element)document.getElementsByTagName(fatherNodeName).item(0);  
            fatherElement.appendChild(newflight);  
            TransformerFactory transformerFactory = TransformerFactory.newInstance();  
            Transformer transformer = transformerFactory.newTransformer();  
            DOMSource source = new DOMSource(document);  
            transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");  
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");  
            StreamResult result = new StreamResult(new FileOutputStream(fileName));  
            transformer.transform(source, result);  
        }  
        catch(Exception e)  
        {  
            System.out.println(e.getMessage());  
        }  
    }  

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧