我想使用 SAXParser
从新闻站点获取一些值.但它的结构对我来说很难,我是 XML 和 SAX 的新手。
问题:新闻站点对其 XML 的站点名称和新闻标题使用相同的标签名称。
当我运行 Java 代码时,它可以正常工作,但问题出在输出上。
我怎样才能只得到<item>
标签的子标签:<title>
?我不想在我的申请中显示网站标题。这对我来说是个大问题。
XML 端
<channel>
<title>Site Name</title>
<item>
<title>News Title!</title>
</item>
</channel>
Java 端
java文件没有错误:)
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean newsTitle = false;
public void startElement(String uri, String localName,
String qName, Attributes attributes)
throws SAXException {
//System.out.println("Start Element :" + qName);
if (qName.equalsIgnoreCase("title")) {
newsTitle = true;
}
}
public void endElement(String uri, String localName,
String qName) throws SAXException {
//System.out.println("End Element :" + qName);
}
public void characters(char ch[], int start, int length)
throws SAXException {
if (newsTitle) {
System.out.println("Title : "
+ new String(ch, start, length));
newsTitle = false;
}
}
};
saxParser
.parse("C:\\ntv.xml",handler);
}
catch (Exception e) {
e.printStackTrace();
}
输出:
Title : Site Name
Title : News Title
最佳答案
您可以使用 XPath 而不是使用 SAX 解析 XML。
您的案例的 XPath 表达式是:
/channel/item/title
示例代码:
import org.xml.sax.InputSource;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import java.io.StringReader;
public class XPathTest {
public static void main(String[] args) throws XPathExpressionException {
String xml = "<channel>\n" +
"\n" +
" <title>Site Name</title>\n" +
"\n" +
" <item> \n" +
" <title>News Title!</title> \n" +
" </item>\n" +
"\n" +
"</channel>";
Object result = XPathFactory.newInstance().newXPath().compile("/channel/item/title").evaluate(new InputSource(new StringReader(xml)));
System.out.print(result);
}
}
关于java - SAXParser - 处理 XML 结构中不同级别的具有相同文本的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15442707/