Java 中解析 XML 文件的混乱
给定这个 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<data>
<track clipid="1">
<url>http://www.emp3world.com/to_download.php?id=33254</url>
<http_method>GET or POST</http_method>
<post_body>a=1&b=2&c=3</post_body>
</track>
</data>
</root>
我所追求的是从此 XML 文件打印类似的内容:
ID: 1
URL: http://www.emp3world.com/to_download.php?id=33254
Http method: GET or POST
目前这是我的原始处理程序代码:
class MyHandler extends DefaultHandler
{
String str = "";
StringBuilder s = new StringBuilder();
public void startElement(String namespaceURI, String sName, String qName, Attributes atts)
{
if(qName.equals("track"))
{
s.append("ID: ").append(atts.getValue("clipid")).append("\n");
}
if(qName.equals("url"))
{
s.append("URL: ");
}
if(qName.equals("http_method"))
{
s.append("Http method: ");
}
}
public void endElement(String uri, String localName, String qName)
{
if(qName.equals("url"))
{
s.append(str).append("\n");
str = "";
}
if(qName.equals("http_method"))
{
s.append(str).append("\n");
str = "";
}
System.out.println(s);
}
public void characters(char[] ch, int start, int length) throws SAXException {
str = new String(ch, start, length);
}
}
我的问题是它总是打印结果 4 次(第一次没有 Http Method 字段)。我想这对所有 Sax 解析器初学者来说都是一个问题。
我知道 startElement、endElement、characters 函数的作用,但如您所见,我不知道如何正确使用它们。我应该在代码中更改哪些内容才能获得正确的输出?
Given this XML file:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<data>
<track clipid="1">
<url>http://www.emp3world.com/to_download.php?id=33254</url>
<http_method>GET or POST</http_method>
<post_body>a=1&b=2&c=3</post_body>
</track>
</data>
</root>
What I am after is to print something like this from this XML file:
ID: 1
URL: http://www.emp3world.com/to_download.php?id=33254
Http method: GET or POST
At the moment this is my primitive handler code:
class MyHandler extends DefaultHandler
{
String str = "";
StringBuilder s = new StringBuilder();
public void startElement(String namespaceURI, String sName, String qName, Attributes atts)
{
if(qName.equals("track"))
{
s.append("ID: ").append(atts.getValue("clipid")).append("\n");
}
if(qName.equals("url"))
{
s.append("URL: ");
}
if(qName.equals("http_method"))
{
s.append("Http method: ");
}
}
public void endElement(String uri, String localName, String qName)
{
if(qName.equals("url"))
{
s.append(str).append("\n");
str = "";
}
if(qName.equals("http_method"))
{
s.append(str).append("\n");
str = "";
}
System.out.println(s);
}
public void characters(char[] ch, int start, int length) throws SAXException {
str = new String(ch, start, length);
}
}
My problem is that it always prints the results 4 times(first time without the Http Method field. I guess this is a problem for all Sax Parsers beginners.
I know what startElement, endElement, characters functions do, but as you can see, I don't know how to use them correctly. What should I change in my code so I can have the correct output?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题是你的人物方法。更改其主体,
然后将此行添加到 startElement 的开头
,您应该会看到一些输出。
以下是关于 SAX 的 Java 教程有关字符的内容方法:
The problem is your characters method. Change its body to
then add this line to the start of startElement
and you should see some output.
Here's what the Java tutorial on SAX has to say about the characters method: