- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我实现的使用URL地址处理XML数据的SAXParser类没有返回结果。该类使用额外的Currency 类,该类又使用setter/getter 存储两个变量currId
和rate
。当我运行我的类时,java 控制台中没有显示任何内容。这是代码:
public class MySAXParser extends DefaultHandler {
private static List<Currencies> currencies = new ArrayList<Currencies>();
private static Currencies curr = null;
private static String text = null;
public static void main(String[] args) {
String url = "http://nbt.tj/en/kurs/export_xml.php?date=2016-08-01&export=xmlout";
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
MySAXParser handler = new MySAXParser();
URL uri = new URL(url);
sp.parse(new InputSource(uri.openStream()), handler);
} catch (Exception ex) {
ex.printStackTrace();
}
for (Currencies curr : currencies) {
System.out.println(curr.toString());
}
}
public void startElement (String s, String s1, String elementName, Attributes atts) throws SAXException {
if (elementName.equalsIgnoreCase("valute")) {
curr = new Currencies();
curr.setCurrId(atts.getValue("id"));
}
}
public void endElement (String s, String s1, String element) throws SAXException {
if (element.equals("valute")) {
currencies.add(curr);
}
if (element.equalsIgnoreCase("value")) {
curr.setRate(Double.parseDouble(text));
}
}
@Override
public void characters (char[] ch, int start, int length) throws SAXException {
text = String.copyValueOf(ch, start, length).trim();
}
}
那么,我错过了什么或做错了什么?任何帮助将不胜感激。
最佳答案
这是我在 Java 1.8 上的尝试:
import java.net.URL;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
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;
public class MySAXParser extends DefaultHandler {
private List<Currency> currencies = new ArrayList<>();
private Currency curr = null;
private StringBuilder sb;
public static void main(String[] args) {
String url = "http://nbt.tj/en/kurs/export_xml.php?date=2016-08-01&export=xmlout";
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setNamespaceAware(true);
SAXParser sp = spf.newSAXParser();
MySAXParser handler = new MySAXParser();
sp.parse(new InputSource(url), handler);
for (Currency curr : handler.getCurrencies()) {
System.out.println(curr.toString());
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
public List<Currency> getCurrencies() {
return currencies;
}
@Override
public void startElement(String s, String localName, String elementName, Attributes atts) throws SAXException {
if (elementName.equalsIgnoreCase("valute")) {
curr = new Currency();
currencies.add(curr);
curr.setCurrId(atts.getValue("ID"));
} else if (elementName.equalsIgnoreCase("value") || elementName.equalsIgnoreCase("CharCode")) {
sb = new StringBuilder();
}
}
@Override
public void endElement(String s, String localName, String elementName) throws SAXException {
if (elementName.equalsIgnoreCase("value")) {
curr.setRate(Double.parseDouble(sb.toString()));
sb = null;
}
else if (elementName.equalsIgnoreCase("CharCode")) {
curr.setCharCode(sb.toString());
sb = null;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (sb != null) {
sb.append(ch, start, length);
}
}
}
类(class)是
public class Currency {
private String currId;
/**
* Get the value of currId
*
* @return the value of currId
*/
public String getCurrId() {
return currId;
}
/**
* Set the value of currId
*
* @param currId new value of currId
*/
public void setCurrId(String currId) {
this.currId = currId;
}
private double rate;
/**
* Get the value of rate
*
* @return the value of rate
*/
public double getRate() {
return rate;
}
/**
* Set the value of rate
*
* @param rate new value of rate
*/
public void setRate(double rate) {
this.rate = rate;
}
private String charCode;
/**
* Get the value of charCode
*
* @return the value of charCode
*/
public String getCharCode() {
return charCode;
}
/**
* Set the value of charCode
*
* @param charCode new value of charCode
*/
public void setCharCode(String charCode) {
this.charCode = charCode;
}
@Override
public String toString() {
return "Currency{" + "currId=" + currId + ", rate=" + rate + ", charCode=" + charCode + '}';
}
}
我得到的示例输出是
Currency{currId=840, rate=7.8683, charCode=USD}
Currency{currId=978, rate=8.7448, charCode=EUR}
Currency{currId=960, rate=10.9395, charCode=XDR}
Currency{currId=156, rate=1.1828, charCode=CNY}
Currency{currId=756, rate=8.075, charCode=CHF}
Currency{currId=810, rate=0.1146, charCode=RUB}
Currency{currId=860, rate=0.2655, charCode=UZS}
Currency{currId=417, rate=1.1643, charCode=KGS}
Currency{currId=398, rate=0.2234, charCode=KZT}
Currency{currId=933, rate=3.9424, charCode=BYR}
Currency{currId=364, rate=0.2617, charCode=IRR}
Currency{currId=971, rate=1.139, charCode=AFN}
Currency{currId=586, rate=0.7504, charCode=PKR}
Currency{currId=949, rate=2.6076, charCode=TRY}
Currency{currId=934, rate=2.2481, charCode=TMT}
Currency{currId=826, rate=10.3618, charCode=GBP}
Currency{currId=36, rate=5.9162, charCode=AUD}
Currency{currId=208, rate=1.1755, charCode=DKK}
Currency{currId=352, rate=0.659, charCode=ISK}
Currency{currId=124, rate=5.9699, charCode=CAD}
Currency{currId=414, rate=26.004, charCode=KWD}
Currency{currId=578, rate=0.9193, charCode=NOK}
Currency{currId=702, rate=5.8215, charCode=SGD}
Currency{currId=752, rate=0.9136, charCode=SEK}
Currency{currId=392, rate=0.761, charCode=JPY}
Currency{currId=944, rate=4.9639, charCode=AZN}
Currency{currId=51, rate=1.6516, charCode=AMD}
Currency{currId=981, rate=3.3539, charCode=GEL}
Currency{currId=498, rate=0.3979, charCode=MDL}
Currency{currId=980, rate=0.317, charCode=UAH}
Currency{currId=784, rate=2.1421, charCode=AED}
Currency{currId=682, rate=2.0979, charCode=SAR}
Currency{currId=356, rate=1.175, charCode=INR}
Currency{currId=985, rate=2.0039, charCode=PLN}
Currency{currId=458, rate=1.9313, charCode=MYR}
Currency{currId=764, rate=0.2258, charCode=THB}
关于java - SAXParser 不从 URL 检索 XML 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38686224/
我曾经使用 Android 单元测试运行我的单元测试,但后来切换到使用 Robolectric 的 Java 单元测试。我注意到使用 SaxParser DefaultHandler 的不同之处。基本
我有一个 Java SAXparser,可以使用 parse(new InputSource(conn.getInputStream())) 下载和解析。不幸的是,有时在下载站点的 xml 时会出现错
我有一个java类,它解析xml文件,并将其内容写入MySQL。一切正常,但问题是当 xml 文件包含无效的 unicode 字符时,会引发异常并且程序停止解析文件。 我的提供商每天都会发送此 xml
我正在为 Android 开发 RSS 提要阅读器,并且为了解析 XML 文件,我使用 SAX API。问题是,在解析数据时,一些文本在一些随机选择的标签中以随机方式被截断(我的意思是同一标签的不同实
我有 xml 结构 id dataTitle title1 title2 我想解析它并仅将标题元素保存在条目下的列表中。如何在
我有一个 org.xml.sax.helpers.DefaultHandler 的实现,它工作正常,除非它出现这样的情况: Jiří Bárta 字符方法被重写为: @O
如果我在 ansi xml 文件中放入一个 utf8 字符 » 并尝试使用 SAXParser 解析它,那么它的解析不会出现任何错误。为什么它没有抛出任何异常? 示例 xml 文件。保存为ansi编码
这很奇怪.. 我有一个 DefaultHandler,它实际上可以很好地处理所有事情,但有时,没有明显的原因,它会给我 0 而不是正确的值。这种情况每次都在同一个地方发生,所以有问题,但我不知道是什么
我在 android/java 上用 SAXParser 等做一些简单的 SAXParsing 它可以正确解析文件,但是当它遇到一些特殊字符时会打嗝,例如如果它解析下面这个 xml: 当它在
我正在尝试构建我的第一个 XML 模式 validator 作为我的代码库和许多项目中的可重用组件。我花了一整天的时间尝试遵循示例并对其进行编码,现在已经启动并运行了概念验证。 唯一的问题是,它给了我
我正在使用 saxparser 来从文件中获取 xml 标签内容。对于非长数据 xml,一切正常。然而,当到达某个位置时,characters() 事件收到截断的 ch[] 并被触发两次。例如,123
我在 Android 应用程序中使用 SAX 解析器一次读取一些提要。脚本执行如下。 // Begin FeedLezer
我有以下格式的 XML: ... "Paul McCartney" "John Lennon" ... SAXParser 一旦到达电子邮件地址就会抛出异常。它认为是一个 XML 元素,一旦遇到
我在 Java 中使用 SAXParser。 有没有办法在使用 SAXParser 解析 xml 时关闭转义? 例如,我有以下 xml: „title” 我想通过c
我正在查看http://docs.oracle.com/javaee/1.4/tutorial/doc/JAXPSAX9.html 。 您可以通过两种方式将 xml 文件与架构关联起来:在应用程序中或
我正在开发一个小型应用程序,该应用程序使用 xml 文件来打印章节的 ArrayList,后者又指向特定的 html 文件。 我使用本教程开始:http://www.anddev.org/novice
我正在向 SAXParser 传递一个 XML 文件和一个处理程序,但收到此错误: parse 方法的属性定义为 (File, DefaultHandler) ,它完全匹配,所以我不确定哪里出错了。完
我需要使用一组模式对传入的 XML 片段执行一些验证。 所有这些架构共享相同的 targetNamespace,但分为不同的 .xsd 文件。 我的java程序正在将每个xsd文件加载到InputSo
我不知道如何正确表达这个问题,但我会举一个例子。 假设我想知道标签block的属性type我可以 if (localName == "block") { int type = Integer
PARAMETRI: vrednost: 2.0 rank: 0.75 − objekt: irc.kis.model.pomozniRazredi.CasovniInterval.CasovniI
我是一名优秀的程序员,十分优秀!