[英]JSoup parse attribute=“value”=“”
(這在大多數情況下按預期實施和工作。)
有一種情況失敗:
<div someattribute="somevalue"=""></div>
<div someattribute="somevalue" =""=""></div>
"=""
並將其替換為"
,但是當有一個可以解析無效 HTML 的庫時,為什么要自己做呢?不幸的是,我想由 JSoup 解析的 HTML 文檔包含類似以下代碼段的內容:
<div someattribute="somevalue"=""></div>
使用此配置調用 JSoup...
Document doc = Jsoup.parse(html);
doc.outputSettings().syntax(Document.OutputSettings.Syntax.xml).charset(StandardCharsets.UTF_8);
String html = doc.html();
...返回包含此代碼段的 HTML 文檔:
<div someattribute="somevalue" =""=""></div>
XPath 然后使用以下消息中止解析此文檔:
Auf Elementtyp "div" müssen entweder Attributspezifikationen, ">" oder "/>" folgen.
在英語中是這樣的:
Element type "div" must be followed by either attribute specifications, ">" or "/>".
jsoup包含一個到 W3C DOM model 的轉換器,其中包括轉換時的屬性過濾。 然后,您可以直接對該 object 運行 xpath 查詢,這不僅有效,而且比序列化到 XML 然后重新解析更有效。
請參閱org.jsoup.helper.W3CDom的文檔
這是一個例子:
import org.w3c.dom.Document;
import org.w3c.dom.Node;
...
String html = "<div someattribute=\"somevalue\"=\"\"></div>";
org.jsoup.nodes.Document jdoc = Jsoup.parse(html);
Document w3doc = W3CDom.convert(jdoc);
String query = "//div";
XPathExpression xpath = XPathFactory.newInstance().newXPath().compile(query);
Node div = (Node) xpath.evaluate(w3doc, XPathConstants.NODE);
System.out.printf("Tag: %s, Attribute: %s",
div.getNodeName(),
div.getAttributes().getNamedItem("someattribute"));
(注意這里的Document
和Node
是 W3C DOM,而不是jsoup DOM 。)
這給了我們:
Tag: div, Attribute: someattribute="somevalue"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.