所以这是我用来匹配HTML标签的代码;当我使用<body> </body>
但不使用<table border = "3"> </table>
等标记时,它会起作用。如何修改它以便它也适用于属性?部分代码如下:
public class MatchDel {
public static boolean isHTMLMatched(String html) {
LinkedStack<String> buffer = new LinkedStack<>();
int j = html.indexOf('<');
while(j != -1) {
int k = html.indexOf('>', j+1);
if(k == -1) {
return false;
}
String tag = html.substring(j+1, k);
if(!tag.startsWith("/")) {
buffer.push(tag);
}
else {
if(buffer.isEmpty()) {
return false;
}
if(!tag.substring(1).equals(buffer.pop())) {
return false;
}
}
j = html.indexOf('<', k+1);
}
return buffer.isEmpty();
}
public static void main(String[] args) {
System.out.println(isHTMLMatched("<body> </body>"));
}
}
答案 0 :(得分:1)
您可以解析文档,查找某些元素并获取这些元素中的数据。
要获取属性的值,请使用Node.attr(String key)
方法
对于元素(及其组合子元素)上的文本,请使用Element.text()
对于HTML,请视情况使用Element.html()
或Node.outerHtml()
例如:
String html = "<p>An <a href='http://example.com/'><b>example</b></a> link.</p>";
Document doc = Jsoup.parse(html);
Element link = doc.select("a").first();
String text = doc.body().text(); // "An example link"
String linkHref = link.attr("href"); // "http://example.com/"
String linkText = link.text(); // "example""
String linkOuterH = link.outerHtml();
// "<a href="http://example.com"><b>example</b></a>"
String linkInnerH = link.html(); // "<b>example</b>"
您的代码中存在问题:if(!tag.substring(1).equals(buffer.pop()))
,因为您将table border = "3"
与字符串table
进行比较,您可以通过仅取第一个单词{{}来解决此问题1}}来自字符串table
,您可以尝试以下代码:
table border = "3"