如何修改代码,以便它还匹配html标签与属性?

时间:2017-12-22 21:39:22

标签: java html

所以这是我用来匹配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>"));
    }
}

1 个答案:

答案 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>"

请参阅jsoup: Java HTML Parser

编辑:

您的代码中存在问题:if(!tag.substring(1).equals(buffer.pop())),因为您将table border = "3"与字符串table进行比较,您可以通过仅取第一个单词{{}来解决此问题1}}来自字符串table,您可以尝试以下代码:

table border = "3"