我有HTML格式的字符串,我试图使用Jsoup获取所有属性及其值。
字符串是
String string=
"<button class=submit btn primary-btn flex-table-btn js-submit type=submit>Sign in</button>";
Document doc = Jsoup.parse(string);
try {
org.jsoup.nodes.Attributes attrs = doc.attributes();
for( org.jsoup.nodes.Element element : doc.getAllElements() )
{
for( Attribute attribute : element.attributes() )
{
System.out.println( attribute.getKey() + " --::-- "+attribute.getValue() );
}
}
} catch (Exception e) {
e.printStackTrace();
}
我想要的输出是::
key: **class** , Value is: **submit btn primary-btn flex-table-btn js-submit**
key: **type** , Value is: **submit**
但我得到的是这个
key: class , Value is: submit
key: btn , Value is:
key: primary-btn , Value is:
key: flex-table-btn , Value is:
key: js-submit , Value is:
key: type , Value is: submit
这是因为引号。如果我使用
String string=
"<button class='submit btn primary-btn flex-table-btn js-submit' type='submit'> Sign in</button>";
我会得到我想要的输出。但我试图得到没有引号。
答案 0 :(得分:0)
你无法在没有引号的情况下进行,因为引号不是可选的。如果没有引号,您引用的HTML会描述一个元素,其中包含一个类(submit
)和一系列非类,无效的附加属性,其名称为{{1} },btn
等,以及任何浏览器将如何解释它,就像JSoup正在做的那样。如果要在元素上添加其他类,则引号为必需。
不带引号的属性值语法
属性名称,后跟零个或多个空格字符,后跟单个U + 003D EQUALS SIGN字符,后跟零个或多个空格字符,后跟属性值,除了上面给出的要求之外属性值, 不得包含任何文字空格字符 ,任何U + 0022引号标记字符(&#34;),U + 0027 APOSTROPHE字符(&#39;) ,&#34; =&#34; (U + 003D)字符,&#34;&lt;&#34; (U + 003C)个字符,&#34;&gt;&#34; (U + 003E)字符,或U + 0060 GRAVE ACCENT字符(`),不得为空字符串。
请注意,&#34;不得包含任何文字空格字符&#34; 我强调的部分。
答案 1 :(得分:0)
Jsoup
很简单:
Document doc = Jsoup.parse(HTML);
List<String> tags = new ArrayList<String>(); //record tags
for(Element e : doc.getAllElements()){ // all elements in html
tags.add(e.tagName().toLowerCase()); // add each tag in tags List
//System.out.println("Tag: "+ e.tag()+" attributes = "+e.attributes()); // attributes with values in string
//System.out.println("Tag: "+ e.tag()+" attributes = "+e.attributes().asList()); //attributes in List<Attribute>
for(Attribute att : e.attributes().asList()){ // for each tag get all attributes in one List<Attribute>
System.out.print("Key: "+att.getKey()+ " , Value: "+att.getValue());
System.out.println();
}
}
System.out.println("*****************");
System.out.println("All Tags = "+tags);
System.out.println("Distinct Tags = "+ new HashSet<String>(tags));