gpt4 book ai didi

java - 使用 Java 从 MediaWiki 读取 XML 标签

转载 作者:行者123 更新时间:2023-12-02 05:30:02 25 4
gpt4 key购买 nike

我需要使用 Java 从以下网址读取“搜索”标签的输出。

首先,我需要从以下 URL 将 XML 读入某个字符串: http://en.wikipedia.org/w/api.php?format=xml&action=query&list=search&srlimit=1&srsearch=big+brother

我最终应该得到这个:

<api>
<query-continue>
<search sroffset="1"/>
</query-continue>
<query>
<searchinfo totalhits="55180"/>
<search>
<p ns="0" title="Big Brothers Big Sisters of America" snippet="<span class='searchmatch'>Big</span> <span class='searchmatch'>Brothers</span> <span class='searchmatch'>Big</span> Sisters of America is a 501(c)(3) non-profit organization whose goal is to help all children reach their potential through <b>...</b> " size="13008" wordcount="1906" timestamp="2014-04-15T06:46:01Z"/>
</search>
</query>
</api>

一旦我有了 XML,我就需要获取搜索标签的内容:“搜索”标签的输出如下所示,我需要从中间的代码中获取两部分:

<search>
<p ns="0" title="Big Brothers Big Sisters of America" snippet="<span class='searchmatch'>Big</span> <span class='searchmatch'>Brothers</span> <span class='searchmatch'>Big</span> Sisters of America is a 501(c)(3) non-profit organization whose goal is to help all children reach their potential through <b>...</b> " size="13008" wordcount="1906" timestamp="2014-04-15T06:46:01Z"/>
</search>

最后,我需要的只是有两个字符串,这等于:

String title = Big Brothers Big Sisters of America
String snippet = "<span class='searchmatch'>Big..."

有人可以帮我修改这段代码吗,我不确定我做错了什么。我认为它甚至没有从 url 检索 XML,更不用说 XML 中的标签了。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("http://en.wikipedia.org/w/api.php?format=xml&action=query&list=search&srlimit=1&srsearch=big+brother");
doc.getDocumentElement().normalize();

XPathFactory xFactory = XPathFactory.newInstance();
XPath xpath = xFactory.newXPath();
XPathExpression expr = xpath.compile("//query/search/text()");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i=0; i<nodes.getLength();i++){
System.out.println(nodes.item(i).getNodeValue());
}

抱歉,我是新手,无法在任何地方找到此问题的答案。

最佳答案

这里的主要问题是您要求的文本节点是<search>的子节点。 ,但实际上<p ..>您想要的不是文本节点:它是一个元素。 (事实上​​,<search> 元素没有文本节点子节点,当您使用“查看源代码”查看来自该 URL 的响应时您可以看出这一点。)

所以您想要做的是将 XPath 表达式更改为

//query/search/p

这会给你 p元素节点。然后求这个节点的两个属性的值titlesnippet在您的 Java 代码中:

Element e = (Element)(nodes.item(i));
String title = e.getAttribute("title");
String snippet = e.getAttribute("snippet");

或者,您可以执行两个 XPath 查询,每个属性一个:

//query/search/p/@title

//query/search/p/@snippet

假设只有一个<p>元素。如果您多次执行此操作 <p>元素,您可能希望将每对属性保留在一起,而不是拥有两个单独的结果列表。

关于java - 使用 Java 从 MediaWiki 读取 XML 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25646284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com