簡體   English   中英

在Java中逐行讀取

[英]Read line by line in java

我正在從POST接收xml文件。 我正在嘗試讀取xml文件中的內容,但是我得到的答案對我來說並不是邏輯。 我只希望閱讀第三行,但這似乎是我的程序不想閱讀的唯一一行。

.JAVA:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    int line=0;
    byte[] buffer=new byte[1000];
    while(line<5) {
        request.getInputStream().readLine(buffer, 0, buffer.length);
        line++;
    }
    String name = new String(buffer, "UTF-8");
    System.out.println(name);
}

.XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Trias xmlns:siri="http://www.siri.org.uk/siri" xmlns="http://www.vdv.de/trias" xmlns:ns3="http://www.ifopt.org.uk/acsb" xmlns:ns4="http://www.ifopt.org.uk/ifopt" xmlns:ns5="http://datex2.eu/schema/1_0/1_0" version="1.2">
    <siri:CheckStatusRequest>
        <siri:RequestTimestamp>2018-03-12T16:36:30.002+01:00</siri:RequestTimestamp>

您不希望第三行包含感興趣的內容。 XML元素之間不需要換行符。 例如,請求主體可以按以下方式交付:

<Trias …><siri:CheckStatusRequest><siri:RequestTimestamp>2018-03-12T16:36:30.002+01:00</siri:RequestTimestamp></siri:CheckStatusRequest></Trias>

(為清楚起見,省略了Trias屬性。)

Java有很多讀取XML的工具。 就您而言, XPath可能是最簡單的:

XPath xpath = XPathFactory.newInstance().newXPath();
String timeStr = xpath.evaluate("//*[local-name()='RequestTimestamp']",
    new InputSource(request.getInputStream()));
OffsetDateTime timestamp = OffsetDateTime.parse(timeStr);

使用readLine()讀取時,應檢查返回值,以確保您未讀取流的末尾。

int line = 0;
byte[] buffer = new byte[1000];
while (line < 5) {
    int read = request.getInputStream().readLine(buffer, 0, buffer.length);
    if (read < 0) {
        break; // end of stream reachead
    }
    line++;
}

但是,最好使用解析器(例如SAX)讀取XML。 這樣,您可以專注於業務任務,而不必處理框架任務,例如XML規范化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM