gpt4 book ai didi

java - SAX XMLParser 不工作

转载 作者:行者123 更新时间:2023-12-01 15:07:43 28 4
gpt4 key购买 nike

我已经遵循了多个关于如何为 Android 平台设置 SAX XML 解析器的在线教程,但它们似乎都不起作用!有什么问题?这是我的代码:

进口:

import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import android.app.Activity;
import android.util.Log;

此代码位于我知道会被调用的方法中,但为什么 logcat 显示“TESTING”?

 try {
URL XMLURL = new URL("https://gdata.youtube.com/feeds/api/videos?q=Crystallize+Lindsey+Stirling+Offical+Music+Video&orderby=relevance");
SAXParserFactory SPF = SAXParserFactory.newInstance();
SAXParser SP = SPF.newSAXParser();

DefaultHandler mainHandler = new DefaultHandler(){

@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes)
throws SAXException {

if(localName.equals("Link")){

String possibleURL = attributes.getValue("href");
Log.i("TEST","TESTING");
}

}
};

SP.parse(new InputSource(XMLURL.openStream()),mainHandler);
} catch (Exception e) {
e.printStackTrace();

}

感谢您的帮助!

最佳答案

这是一个命名空间问题。

SAXParserFactory SPF = SAXParserFactory.newInstance();
SAXParser SP = SPF.newSAXParser();

为您提供了一个无法正确处理 namespace 的解析器。

如果您更改 startElement 以检查 qName 中的值“link”,您的代码将会工作,但这只是一种创可贴修复。

尽管此元素位于默认命名空间 http://www.w3.org/2005/Atom 中,但本文档中有 个命名空间为文档指定。

您应该告诉解析器工厂为您提供一个 namespace 感知的解析器:

SAXParserFactory SPF = SAXParserFactory.newInstance();
SPF.setNamespaceAware(true);
SAXParser SP = SPF.newSAXParser();

然后您将获得预期的结果,而无需更改 startElement 方法,除非您必须查找正确的值,即检查“link”而不是“Link”。

关于java - SAX XMLParser 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12756134/

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