使用 css 选择器解析 XML 的 Java 库

Posted

技术标签:

【中文标题】使用 css 选择器解析 XML 的 Java 库【英文标题】:Java library using css selectors to parse XML 【发布时间】:2011-10-18 21:05:32 【问题描述】:

是否有类似 JAVA/android 库的 jQuery 使用 CSS 选择器来解析 XML?

喜欢:

String desc = myXML.find("bloc[type=pro]").get(0).attr("description");

Chainability 也是我在寻找的东西,和 jQuery 一样......

我希望这存在!

【问题讨论】:

【参考方案1】:

虽然最初设计为支持 CSS 选择器的 html 解析器,但如果您的唯一目的是提取数据,而不是操作,Jsoup 也适用于 XML 文档> 数据。

Document document = Jsoup.parse(xmlString);
String desc = document.select("bloc[type=pro]").get(0).attr("description");
// ...

您看,语法几乎与您在问题中的语法相同。

【讨论】:

当我这样做时:Elements xmlBlocs = doc.select("bloc"); 然后xmlBlocs.get(0).select("place"),我从其他集团元素获得 place... 为什么? 我无法重现您的问题。也许您的 XML 格式不正确,或者您没有运行您认为正在运行的代码?【参考方案2】:

Apache Jericho 是您正在寻找的。

你的例子看起来像

String desc = source.getFirstElement( "type", "pro" ).getAttributeValue( "description" );

用 jericho 解析 HTML 是一种魅力,所以我想对于结构良好的 XML 来说它更容易。

【讨论】:

【参考方案3】:

由于 JsoupJericho 等其他库中存在一些错误,因此与我的预期不同,

我写了一个扩展 org.xml.sax.helpers.DefaultHandler 的类来解析 XML。然后,我从 Jsoup 中编写了另外两个类似于 ElementElements 的类,其中包含两个名为 find 的函数,用于处理 CSS3 选择器,attr 用于返回属性值。

我现在正在清理和评论该代码...稍后我会为感兴趣的人发布该库。

xmlDoc.find("bloc[type=Pro]>act").attr("label");

现在可以像在 jQuery 中一样!


编辑!

这里是访问代码的链接,供感兴趣的人使用:Google Code Project


移至 GitHub:https://github.com/ChristopheCVB/JavaXMLQuery

【讨论】:

【参考方案4】:

我使用 XPath 来解决这个问题。像 JDOM 这样的 XML 解析对 XPath 来说是可以的。也许 jQuery 看看 XPath 是如何工作的:p

//bloc[@type="pro"][1]/@description

Xpath 索引从 1 开始,而不是 0

https://www.w3schools.com/xml/xpath_syntax.asp

【讨论】:

【参考方案5】:

droidQuery 库可以完成您正在寻找的许多事情。虽然语法略有不同,但您可以:

使用链式 jQuery 样式的命令获取视图属性,例如:

CharSequence text = $.with(this, R.id.myTextView).attr("text");

解析 XML:

Document dom = $.parseXML(myXMLString);

如果您是 jQuery 的粉丝,您会很高兴看到它提供的几乎所有功能都包含在 droidQuery 中,尽管语法可能不同有时,它的主要目标是在语法上尽可能接近 jQuery

【讨论】:

以上是关于使用 css 选择器解析 XML 的 Java 库的主要内容,如果未能解决你的问题,请参考以下文章

Python BeautifulSoup库使用

HTML&XML解析器--Jsoup

解析库的使用---页面解析总结

爬虫——BeautifulSoup4解析器

Java中的解析字节数组

用于 Java 的 HTML/XML 解析器 [关闭]