gpt4 book ai didi

java - 使用 Java SAX 解析 XML 文档时出现问题

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

我正在解析 XML 文档。我之前已经这样做了数千次,但我不明白为什么会遇到以下问题:

这是我正在解析的 XML 文档的相关部分:

XML: <?xml version="1.0" standalone="yes"?>
<ratings>
<url_template>http://api.netflix.com/users/T1BlCJtdcWMuF6gJEfue96_W.kZ_gW81h59KqLEfT1AzE-/ratings/title?{-join|&amp;|title_refs}</url_template>
<ratings_item>
<user_rating value="not_interested"></user_rating>
<predicted_rating>4.8</predicted_rating>
<id>http://api.netflix.com/users/T1BlCJtdcWMuF6gJEfue96_W.kZ_gW81h59KqLEfT1AzE-/ratings/title/70112530</id>
<link href="http://api.netflix.com/catalog/titles/series/70112530/seasons/70112530" rel="http://schemas.netflix.com/catalog/title" title="Castle: Season 1">
</link>
.
.
.

所以,我试图将 user_ rating、predicted_ rating 和 id 列出来。我正在成功地做到这一点。但是,我注意到,当 user_ rating 不包含任何值时,predicted_ rating 将自动采用 的值,而不是它自己的值 4.8。然而,当 user_rating 确实具有值时,predicted_ rating 将具有正确的值。这是我的解析代码:

public class RatingsHandler extends DefaultHandler {

Vector vector;
Ratings ratings;

boolean inUserRating;
boolean inPredictedRating;
boolean inAverageRating;
boolean inID;

public void startDocument() throws SAXException {
vector = new Vector();
ratings = new Ratings();
}

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

if (localName.equals("user_rating")) {
inUserRating = true;

} else if (localName.equals("predicted_rating")) {
inPredictedRating = true;

} else if (localName.equals("average_rating")) {
inAverageRating = true;

} else if (localName.equals("id")) {
inID = true;

}

}

public void characters(char ch[], int start, int length)
throws SAXException {

if (inUserRating) {
ratings.setUserRating(new String(ch, start, length));
inUserRating = false;
} else if (inPredictedRating) {
ratings.setPredRating(new String(ch, start, length));
inPredictedRating = false;
} else if (inAverageRating) {
ratings.setAvgRating(new String(ch, start, length));
inAverageRating = false;
} else if (inID) {
Const.rating_id = new String(ch, start, length);
inID = false;
}
}

public void endDocument() throws SAXException {

if (ratings != null) {
vector.addElement(ratings);
}
}

public Vector getRatings() {
return vector;
}

}

这与 user_ rating 有一个属性“value”有关吗?我将不胜感激任何帮助。谢谢!

最佳答案

我建议你等待

endElement(String uri, String localName, String qName)

在将元素标记为已传递之前:

inSomething = false

我可以想象,当元素为空时,

public void characters(char[] ch, int start, int length)

不会被调用,您的标志不会被清除,并且您将遇到两个 inSomething 标志设置为 true 的不一致状态。

关于java - 使用 Java SAX 解析 XML 文档时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3581340/

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