java 解析html body_java讀取html文件,並獲取body中所有的標簽以及內容

packagecom.lmt.service.file;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStreamReader;importjava.io.Reader;importorg.springframework.stereotype.Component;importcom.lmt.config.UrlConstants;

@Componentpublic classParseFile {/*** 解析html文件

*@paramfile

*@return

*/

publicString readHtml(File file){

String body= "";try{

FileInputStream iStream= newFileInputStream(file);

Reader reader= newInputStreamReader(iStream);

BufferedReader htmlReader= newBufferedReader(reader);

String line;boolean found = false;while (!found && (line = htmlReader.readLine()) != null) {if (line.toLowerCase().indexOf("

的前面可能存在空格

found = true;

}

}

found= false;while (!found && (line = htmlReader.readLine()) != null) {if (line.toLowerCase().indexOf("

found= true;

}else{//如果存在圖片,則將相對路徑轉換為絕對路徑

String lowerCaseLine =line.toLowerCase();if (lowerCaseLine.contains("src")) {//這里是定義圖片的訪問路徑

String directory = "D:/test";//如果路徑名不以反斜杠結尾,則手動添加反斜杠

/*if (!directory.endsWith("\\")) {

directory = directory + "\\";

}*/

//line = line.substring(0, lowerCaseLine.indexOf("src") + 5) + directory + line.substring(lowerCaseLine.indexOf("src") + 5);

/*String filename = extractFilename(line);

line = line.substring(0, lowerCaseLine.indexOf("src") + 5) + directory + filename + line.substring(line.indexOf(filename) + filename.length());*/

//如果該行存在多個元素,則分行進行替代

String[] splitLines = line.split("

for (int i = 0; i < splitLines.length; i++) {if (splitLines[i].toLowerCase().startsWith("src")) {

splitLines[i]= splitLines[i].substring(0, splitLines[i].toLowerCase().indexOf("src") + 5)+directory+ splitLines[i].substring(splitLines[i].toLowerCase().indexOf("src") + 5);

}

}//最后進行拼接

line = "";for (int i = 0; i < splitLines.length - 1; i++) { //循環次數要-1,因為最后一個字符串后不需要添加

line = line + splitLines[i] + "

}

line= line + splitLines[splitLines.length - 1];

}

body= body + line + "\n";

}

}

htmlReader.close();//System.out.println(body);

}catch(Exception e) {

e.printStackTrace();

}returnbody;

}/***

*@paramhtmlLine 一行html片段,包含元素

*@return文件名*/

public staticString extractFilename(String htmlLine) {int srcIndex = htmlLine.toLowerCase().indexOf("src=");if (srcIndex == -1) { //圖片不存在,返回空字符串

return "";

}else{

String htmlSrc= htmlLine.substring(srcIndex + 4);char splitChar = '\"'; //默認為雙引號,但也有可能為單引號

if (htmlSrc.charAt(0) == '\'') {

splitChar= '\'';

}

String[] firstSplit=htmlSrc.split(String.valueOf(splitChar));

String path= firstSplit[1]; //第0位為空字符串

String[] secondSplit = path.split("[/\\\\]"); //匹配正斜杠或反斜杠

return secondSplit[secondSplit.length - 1];

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要接收SOAP消息并获取SOAP Body元素值,您可以使用Java的SOAP API。以下是一个示例代码片段,说明如何使用SOAP API读取SOAP消息Body元素值: ```java // 创建一个SOAP消息的解析器 MessageFactory messageFactory = MessageFactory.newInstance(); SOAPMessage soapMessage = messageFactory.createMessage(); // 从SOAP消息获取SOAP Body元素 SOAPBody soapBody = soapMessage.getSOAPBody(); // 获取SOAP Body元素的第一个子元素 Node firstChild = soapBody.getFirstChild(); // 获取SOAP Body元素的值 String bodyValue = firstChild.getTextContent(); ``` 在此示例,我们首先创建一个SOAP消息解析器,然后使用它来创建一个新的SOAP消息。接下来,我们从SOAP消息获取SOAP Body元素,并使用它的getFirstChild()方法获取第一个子元素。最后,我们使用子元素的getTextContent()方法获取SOAP Body元素的值。 请注意,此示例仅适用于SOAP消息已经被解析到SOAPMessage对象。如果您需要从传入的SOAP消息获取SOAP Body元素,请使用类似于以下代码的方法: ```java // 获取传入的HTTP请求 HttpServletRequest request = ...; // 获取请求的输入流 InputStream input = request.getInputStream(); // 创建一个SOAP消息解析器 MessageFactory messageFactory = MessageFactory.newInstance(); SOAPMessage soapMessage = messageFactory.createMessage(null, input); // 从SOAP消息获取SOAP Body元素 SOAPBody soapBody = soapMessage.getSOAPBody(); // 获取SOAP Body元素的第一个子元素 Node firstChild = soapBody.getFirstChild(); // 获取SOAP Body元素的值 String bodyValue = firstChild.getTextContent(); ``` 在此示例,我们首先获取传入的HTTP请求,并从获取输入流。接下来,我们使用输入流创建一个新的SOAP消息解析器,并将其用于创建新的SOAP消息。接下来,我们从SOAP消息获取SOAP Body元素,并使用它的getFirstChild()方法获取第一个子元素。最后,我们使用子元素的getTextContent()方法获取SOAP Body元素的值。 请注意,此示例仅适用于传入的HTTP请求包含SOAP消息。如果请求不包含SOAP消息,则必须使用其他方法来解析请求的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值