使用 JSoup 解析 HTML Java 中输入字段的大小
Parsing HTML on size of input field in Java with JSoup
我正在尝试解析 HTML 中显示给我的系统中的错误文件。不觉得很漂亮,但这是我必须处理的。
错误以代码显示,我可以根据集合和消息 ID 在目录中找到对这些代码的引用。
<HTML>
<BODY>
<h4>2020-07-16 10:24:22.614</h4>
<SPAN STYLE="color:black; font:bold;"> Set:<INPUT TYPE="text" VALUE="158" SIZE=3</INPUT> Id: <INPUT TYPE="text" VALUE="10420" SIZE=5</INPUT>
</SPAN>
</BODY>
</HTML>
我正在尝试使用 JSoup 解析时间戳和输入字段中的两个值。时间戳完全不是问题,但我似乎没有找到解析消息的Set和Id的方法。
Document doc = Jsoup.parse(errorLog, "UTF-8", "");
Element body = doc.body();
Elements MessageTimestamps = doc.select("h4");
Elements MessageSets = doc.getElementsByAttributeValue("SIZE", "3");
Elements MessageID = doc.getElementsByAttributeValue("SIZE","5");
String[] timestampArray = new String[MessageTimestamps.size()];
System.out.println("Total: " + timestampArray.length);
for(int i = 0; i< MessageTimestamps.size(); i++) {
System.out.println("Timestamp: " + MessageTimestamps.get(i).text());
System.out.println("MessageSets: " + MessageSets.get(i).text());
}
结果:
Total: 6
Timestamp: 2020-07-16 10:24:22.614
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
有人有想法吗?
您可以 select 具有 SIZE
属性且包含值 3
或 5
的输入字段,方法如下:
public static void main(String[] args){
String html = "<HTML>\n"
+ "<BODY>\n"
+ "<h4>2020-07-16 10:24:22.614</h4>\n"
+ "<SPAN STYLE=\"color:black; font:bold;\"> Set:<INPUT TYPE=\"text\" VALUE=\"158\" SIZE=3</INPUT> Id: <INPUT TYPE=\"text\" VALUE=\"10420\" SIZE=5</INPUT>\n"
+ "</SPAN>\n"
+ "</BODY>\n"
+ "</HTML>";
Document doc = Jsoup.parse(html);
Element time = doc.selectFirst("h4");
Element set = doc.selectFirst("INPUT[SIZE*=3]");
Element id = doc.selectFirst("INPUT[SIZE*=5]");
System.out.println(time.text());
System.out.println(set.attr("value"));
System.out.println(id.attr("value"));
}
我正在尝试解析 HTML 中显示给我的系统中的错误文件。不觉得很漂亮,但这是我必须处理的。
错误以代码显示,我可以根据集合和消息 ID 在目录中找到对这些代码的引用。
<HTML>
<BODY>
<h4>2020-07-16 10:24:22.614</h4>
<SPAN STYLE="color:black; font:bold;"> Set:<INPUT TYPE="text" VALUE="158" SIZE=3</INPUT> Id: <INPUT TYPE="text" VALUE="10420" SIZE=5</INPUT>
</SPAN>
</BODY>
</HTML>
我正在尝试使用 JSoup 解析时间戳和输入字段中的两个值。时间戳完全不是问题,但我似乎没有找到解析消息的Set和Id的方法。
Document doc = Jsoup.parse(errorLog, "UTF-8", "");
Element body = doc.body();
Elements MessageTimestamps = doc.select("h4");
Elements MessageSets = doc.getElementsByAttributeValue("SIZE", "3");
Elements MessageID = doc.getElementsByAttributeValue("SIZE","5");
String[] timestampArray = new String[MessageTimestamps.size()];
System.out.println("Total: " + timestampArray.length);
for(int i = 0; i< MessageTimestamps.size(); i++) {
System.out.println("Timestamp: " + MessageTimestamps.get(i).text());
System.out.println("MessageSets: " + MessageSets.get(i).text());
}
结果:
Total: 6
Timestamp: 2020-07-16 10:24:22.614
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
有人有想法吗?
您可以 select 具有 SIZE
属性且包含值 3
或 5
的输入字段,方法如下:
public static void main(String[] args){
String html = "<HTML>\n"
+ "<BODY>\n"
+ "<h4>2020-07-16 10:24:22.614</h4>\n"
+ "<SPAN STYLE=\"color:black; font:bold;\"> Set:<INPUT TYPE=\"text\" VALUE=\"158\" SIZE=3</INPUT> Id: <INPUT TYPE=\"text\" VALUE=\"10420\" SIZE=5</INPUT>\n"
+ "</SPAN>\n"
+ "</BODY>\n"
+ "</HTML>";
Document doc = Jsoup.parse(html);
Element time = doc.selectFirst("h4");
Element set = doc.selectFirst("INPUT[SIZE*=3]");
Element id = doc.selectFirst("INPUT[SIZE*=5]");
System.out.println(time.text());
System.out.println(set.attr("value"));
System.out.println(id.attr("value"));
}