.net java xml_java.net.MalformedURLException – 在通过StAX解析XML文件时
我必须使用StAX解析XML文件.
我抓住了一堆例外:
javax.xml.stream.XMLStreamException: java.net.MalformedURLException
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.setInputSource(XMLStreamReaderImpl.java:217)
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.(XMLStreamReaderImpl.java:189)
at com.sun.xml.internal.stream.XMLInputFactoryImpl.getXMLStreamReaderImpl(XMLInputFactoryImpl.java:262)
at com.sun.xml.internal.stream.XMLInputFactoryImpl.createXMLStreamReader(XMLInputFactoryImpl.java:129)
at com.epam.lab.StaxXmlParser.(StAXParserDemo.java:46)
at com.epam.lab.StAXParserDemo.main(StAXParserDemo.java:20)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.net.MalformedURLException
at java.net.URL.(URL.java:619)
at java.net.URL.(URL.java:482)
at java.net.URL.(URL.java:431)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:610)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1290)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDocumentEntity(XMLEntityManager.java:1242)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.setInputSource(XMLDocumentScannerImpl.java:257)
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.setInputSource(XMLStreamReaderImpl.java:204)
这是xml文件如何loooks:
xsi:noNamespaceSchemaLocation="newEmployee.xsd">
Carl Cracker
75000
Harry Hacker
50000
Tony Tester
40000
这是代码片段:
public class StAXParserDemo {
public static void main(String[] args) {
try {
StaxXmlParser staxXmlParser = new StaxXmlParser(EMPLOYEE_XML.getFilename());
List employees = staxXmlParser.parseEmployee();
for (Employee emp : employees) {
System.out.println(emp);
}
} catch (Throwable e) {
e.printStackTrace();
}
}
}
class StaxXmlParser {
private List employeeList;
private Employee currentEmployee;
private String tagContent;
private XMLStreamReader reader;
public StaxXmlParser(String filename) {
employeeList = null;
currentEmployee = null;
tagContent = null;
try {
XMLInputFactory factory = XMLInputFactory.newFactory();
reader = factory.createXMLStreamReader(ClassLoader.getSystemResourceAsStream(filename));
parseEmployee();
} catch (XMLStreamException e) {
e.printStackTrace();
}
}
public List parseEmployee() throws XMLStreamException {
while (reader.hasNext()) {
int event = reader.next();
switch (event) {
case XMLStreamConstants.START_ELEMENT:
if ("employee".equals(reader.getLocalName())) {
currentEmployee = new Employee();
}
if ("staff".equals(reader.getLocalName())) {
employeeList = new ArrayList<>();
}
if ("hireday".equals(reader.getLocalName())) {
int yearAttr = Integer.parseInt(reader.getAttributeValue(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "year"));
int monthAttr = Integer.parseInt(reader.getAttributeValue(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "month"));
int dayAttr = Integer.parseInt(reader.getAttributeValue(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "day"));
currentEmployee.setHireDay(yearAttr, monthAttr, dayAttr);
}
break;
case XMLStreamConstants.CHARACTERS:
tagContent = reader.getText().trim();
break;
case XMLStreamConstants.END_ELEMENT:
switch (reader.getLocalName()) {
case "employee":
employeeList.add(currentEmployee);
break;
case "name":
currentEmployee.setName(tagContent);
break;
case "salary":
currentEmployee.setSalary(Double.parseDouble(tagContent));
break;
}
}
}
return employeeList;
}
}
更新:
按照我改为下一个的建议:
reader = factory.createXMLStreamReader(new FileInputStream(new File(filename)));
现在它打印下一个输出:
Employee { name=Carl Cracker, salary=75000.0, hireDay=null }
Employee { name=Harry Hacker, salary=50000.0, hireDay=null }
Employee { name=Tony Tester, salary=40000.0, hireDay=null }
属性提取有什么问题?我更接近新问题.
为什么会这样?有什么建议?
解决方法:
您的问题似乎与ClassLoader#getSystemResourceAsStream()有关.此方法将查找类路径中的资源,如果找不到,则会让您的XMLStreamReader抱怨MalformedURL.
选项:
>使用FileInputStream并提供文件的路径.
reader = factory.createXMLStreamReader(new FileInputStream(PATH_TO_XML));
>将您的xml添加到您的eclipse类路径中 – 运行方式 – >运行配置 – > Classpath – >单击用户条目,然后单击高级 – >添加外部文件夹(转到包含xml的文件夹)
标签:java,xml-parsing,xml,runtimeexception,stax
来源: https://codeday.me/bug/20190624/1280325.html
.net java xml_java.net.MalformedURLException – 在通过StAX解析XML文件时相关推荐
- java stax xml_Java小知识:使用Stax解析xml文件
问题: 通过使用Stax解析xml文件时,出现以下错误消息: 线程"主"中的异常javax.xml.stream.XMLStreamException:[row,col]:[86, ...
- XML入门(四)使用STAX解析XML
前言 本章讲解使用STAX解析XML文件 方法 1.概念 在我们XML解析技术发展的过程中,诞生了很多优秀的解析技术,如:DOM.SAX.JDOM.Dom4J.STAX等 这里我们来讲解一下STAX解 ...
- java jdom dom4j_Java基础系列17:使用DOM、SAX、JDOM、DOM4J解析XML文件详解
一 简介 在Java中,可以使用多种方式来解析XML文件,其中最常见的可能就是DOM.SAX.JDOM.DOM4J这四种方式了.其中,DOM和SAX这两种解析XML文件的方式有jdk自带的API,因此 ...
- java stax xml_Java代码:使用StAX创建xml文件
本示例的目标是产生以下xml文件.该方法是通过StAX API-XMLStreamWriter.使用StAX创建xml文件可能只需几秒钟的时间. 首先定义城市等级 classCity{ private ...
- java stax_Java学习:使用StAX解析XML
本文是我在学习<Java核心技术>第九版卷II(高级特性)时写的一段代码.原书作者为(美)Cay S. Horstmann,Gary Cornell,译者为陈昊鹏.王浩.姚建平等.我的Ja ...
- java stax xml_在JDK6.0中用StAX解析XML
摘要 J2EE/XML开发人员一般都用DOM(Document Object Model,文档对象模型)API或者(SAX Simple API for XML)来解析XML文件.这些API各有利弊. ...
- java xml中的冒号_Java jdom解析xml文件带冒号的属性
Java jdom解析xml文件带冒号的属性 如果xml文件解析带了冒号的属性,一般都是要特别处理,这里是命名空间,N年前遇到过一次忘记记录,后来也忘了,这次再记录下. 解决了,记录下,分享给大家,百 ...
- JDOM是JAVA中最常用的一种解析XML的工具
JDOM是JAVA中最常用的一种解析XML的工具,我们可以从JDOM的官方网站www.jdom.org 下载JDOM1.0.ZIP压缩包,将其解压,将JDOM.JAR文件配置到classpath当中去 ...
- java解析xml文档_Java解析xml文件
读xml文件: xml文件内容: Java Eclipse Swift Xcode C# Visual Studio 代码: package XMLParse; import java.io.File ...
最新文章
- 【radar】毫米波雷达-相机-激光雷达融合相关论文汇总(特征融合、RPN融合、弱监督融合、决策融合、深度估计、跟踪)(5)
- otsu自适应阈值分割的算法描述和opencv实现,及其在肤色检测中的应用
- 手机版网页需要上服务器吗,手机能做网页服务器吗
- linux下oracle安装
- Python Django related_name属性使用示例
- 众唱点歌机会显示无法连接服务器,目前众多厂商唱多的服务器附加存储缺点分析...
- QT_4_QpushButton的简单使用_对象树
- 计算机实验报告表九,北理大学计算机实验基础实验九实验报告表-20210617084645.pdf-原创力文档...
- haoi2018奇怪的背包题解
- 厌倦 VMware,试试更轻量级的虚拟机!
- Classic Poems ----Tagore, Stray birds
- 金山词霸2007两个小BUG
- 各国程序员薪资水平,咱有点惨...
- Vacuum tube 真空管/电子管
- Go test 命令行参数
- 谁是“明日之子”?互动视频的模糊元年
- Centos7 使用cobbler搭建PXE网络装机服务器安装Centos、Windows、PE、自定义wim镜像
- Oracle中 to_date()函数用法详解
- [HFCTF 2021 Final]tinypng
- BigDecimal 正数转换成负数
热门文章
- 大数据平台对企业有什么作用
- 大数据平台数据挖掘的作用是什么
- js 串口通信mscomm接收undefined_串口通信帧的同步方法(识别一帧数据的起始结束)42...
- 计算机编程的计算法,计算方法
- 上传服务器响应失败,Django CKEditor 上传图片提示“不正确的服务器响应”的解决办法...
- java url 格式化_String.format()的使用:Java字符串格式化
- c+mysql主从切换_mysql主从配置
- 大数据面试都问些什么?
- python执行不了elif_浅谈对python中if、elif、else的误解
- Callable接口与runable和Thread类