我必须使用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文件时相关推荐

  1. java stax xml_Java小知识:使用Stax解析xml文件

    问题: 通过使用Stax解析xml文件时,出现以下错误消息: 线程"主"中的异常javax.xml.stream.XMLStreamException:[row,col]:[86, ...

  2. XML入门(四)使用STAX解析XML

    前言 本章讲解使用STAX解析XML文件 方法 1.概念 在我们XML解析技术发展的过程中,诞生了很多优秀的解析技术,如:DOM.SAX.JDOM.Dom4J.STAX等 这里我们来讲解一下STAX解 ...

  3. java jdom dom4j_Java基础系列17:使用DOM、SAX、JDOM、DOM4J解析XML文件详解

    一 简介 在Java中,可以使用多种方式来解析XML文件,其中最常见的可能就是DOM.SAX.JDOM.DOM4J这四种方式了.其中,DOM和SAX这两种解析XML文件的方式有jdk自带的API,因此 ...

  4. java stax xml_Java代码:使用StAX创建xml文件

    本示例的目标是产生以下xml文件.该方法是通过StAX API-XMLStreamWriter.使用StAX创建xml文件可能只需几秒钟的时间. 首先定义城市等级 classCity{ private ...

  5. java stax_Java学习:使用StAX解析XML

    本文是我在学习<Java核心技术>第九版卷II(高级特性)时写的一段代码.原书作者为(美)Cay S. Horstmann,Gary Cornell,译者为陈昊鹏.王浩.姚建平等.我的Ja ...

  6. java stax xml_在JDK6.0中用StAX解析XML

    摘要 J2EE/XML开发人员一般都用DOM(Document Object Model,文档对象模型)API或者(SAX Simple API for XML)来解析XML文件.这些API各有利弊. ...

  7. java xml中的冒号_Java jdom解析xml文件带冒号的属性

    Java jdom解析xml文件带冒号的属性 如果xml文件解析带了冒号的属性,一般都是要特别处理,这里是命名空间,N年前遇到过一次忘记记录,后来也忘了,这次再记录下. 解决了,记录下,分享给大家,百 ...

  8. JDOM是JAVA中最常用的一种解析XML的工具

    JDOM是JAVA中最常用的一种解析XML的工具,我们可以从JDOM的官方网站www.jdom.org 下载JDOM1.0.ZIP压缩包,将其解压,将JDOM.JAR文件配置到classpath当中去 ...

  9. java解析xml文档_Java解析xml文件

    读xml文件: xml文件内容: Java Eclipse Swift Xcode C# Visual Studio 代码: package XMLParse; import java.io.File ...

最新文章

  1. 【radar】毫米波雷达-相机-激光雷达融合相关论文汇总(特征融合、RPN融合、弱监督融合、决策融合、深度估计、跟踪)(5)
  2. otsu自适应阈值分割的算法描述和opencv实现,及其在肤色检测中的应用
  3. 手机版网页需要上服务器吗,手机能做网页服务器吗
  4. linux下oracle安装
  5. Python Django related_name属性使用示例
  6. 众唱点歌机会显示无法连接服务器,目前众多厂商唱多的服务器附加存储缺点分析...
  7. QT_4_QpushButton的简单使用_对象树
  8. 计算机实验报告表九,北理大学计算机实验基础实验九实验报告表-20210617084645.pdf-原创力文档...
  9. haoi2018奇怪的背包题解
  10. 厌倦 VMware,试试更轻量级的虚拟机!
  11. Classic Poems ----Tagore, Stray birds
  12. 金山词霸2007两个小BUG
  13. 各国程序员薪资水平,咱有点惨...
  14. Vacuum tube 真空管/电子管
  15. Go test 命令行参数
  16. 谁是“明日之子”?互动视频的模糊元年
  17. Centos7 使用cobbler搭建PXE网络装机服务器安装Centos、Windows、PE、自定义wim镜像
  18. Oracle中 to_date()函数用法详解
  19. [HFCTF 2021 Final]tinypng
  20. BigDecimal 正数转换成负数

热门文章

  1. 大数据平台对企业有什么作用
  2. 大数据平台数据挖掘的作用是什么
  3. js 串口通信mscomm接收undefined_串口通信帧的同步方法(识别一帧数据的起始结束)42...
  4. 计算机编程的计算法,计算方法
  5. 上传服务器响应失败,Django CKEditor 上传图片提示“不正确的服务器响应”的解决办法...
  6. java url 格式化_String.format()的使用:Java字符串格式化
  7. c+mysql主从切换_mysql主从配置
  8. 大数据面试都问些什么?
  9. python执行不了elif_浅谈对python中if、elif、else的误解
  10. Callable接口与runable和Thread类