- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚尝试利用 StAX 来解析一些简单的 XML 文档
<?xml version="1.0"?>
<root>
<Employee>
<name>John</name>
</Employee>
<Employee>
<name>Lisa</name>
</Employee>
</root>
...但是遇到了一个让我抓狂的问题。这是代码:
public class Foo {
public String name;
@Override
public String toString() {
return "Foo{" + "name='" + name + '\'' + '}';
}
}
public class StAXParserTest {
@Test
public void testFoo() throws Exception {
List<Foo> result = new ArrayList<>();
XMLEventReader eventReader = XMLInputFactory
.newInstance()
.createXMLEventReader(getResourceAsStream("example.xml"));
while (eventReader.hasNext()) {
XMLEvent event = eventReader.nextEvent();
if (event.isStartElement()) {
StartElement startElem = event.asStartElement();
switch (startElem.getName().getLocalPart()) {
case "Employee":
result.add(parseFoo(eventReader));
break;
}
}
}
System.out.println(result);
}
private static Foo parseFoo(XMLEventReader eventReader) throws XMLStreamException {
Foo foo = new Foo();
while (true) {
XMLEvent event = eventReader.nextEvent();
if (event.isStartElement()) {
switch (event.asStartElement().getName().getLocalPart()) {
case "name":
foo.name = eventReader.nextEvent().asCharacters().getData();
break;
}
}
if (event.isEndElement() && event.asEndElement().getName().getLocalPart().equals("Foo")) {
return foo;
}
}
}
private InputStream getResourceAsStream(String filename) throws URISyntaxException {
return this.getClass().getClassLoader().getResourceAsStream(filename);
}
}
没有什么错吧。但如果您运行测试,您将收到以下错误。
java.util.NoSuchElementException
at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(XMLEventReaderImpl.java:88)
at stax.StAXParserTest.parseFoo(StAXParserTest.java:40)
at stax.StAXParserTest.testFoo(StAXParserTest.java:29)
我花了一个小时才找出原因。为了解决这个问题,POJO 类名必须与 XML 标签名完全相同(即 Foo.class 应重命名为 Employee.class),然后才能正常工作:
[Employee{name='John'}, Employee{name='Lisa'}]
所以我的问题是W-H-Y-YYYYYY?这绝对是不直观的。这不是 JAXB。不是任何其他对象映射器。如果我自己完成所有工作,那么为什么类名很重要?
附注最初是 Employee.class
和<employee/>
问题,但我简化了测试用例以强调类名。
最佳答案
您必须将员工检查为结束节点,而不是“foo”
。
if (event.isEndElement() && event.asEndElement()
.getName().getLocalPart()
.equals("Employee")) {
return foo;
}
关于java - StAX - XMLEventReader 意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43212304/
来自XMLEventReader : String getElementText() Reads the content of a text-only element. Precondition: t
我正在使用 XMLEventReader 来解析大型 xml 文件,它在一个项目中工作正常,但是当我在另一个项目中导入具有相同导入的相同类时,它不能很好地解析 xml,并且给出STAX 事件。 下面是
我刚刚尝试利用 StAX 来解析一些简单的 XML 文档 John Lisa ...但是遇到了一个让我抓狂的问题。这是代码
我希望能够将 XML 文件通过管道传输到程序中,并使用 XMLEventReader 读取它。我能为 XMLEventReader 找到的唯一构造函数将 Source 作为参数,但 scala.io.
我在 Scala xml 事件阅读器中发现了一个奇怪的行为。对于这样的 xml: AT&T Bell Labs 0 63739 它为标题生成 EvText
由于我缺乏对文件系统行为的了解,我提前道歉。 我需要读取一个大的 XML 文件,修改它,然后将其写入同一个文件。 这是我设置 XMLEventReader 和 XMLEventWriter 的代码:
我在网上冲浪。我发现 XMLStreamReader 是用于解析 XML 的游标样式 API。 XMLEventReader 是Iterator style API for Parsing XML。有
我在处理一些 .xml 时遇到了一个以前从未见过 的异常。这是损坏的代码: public class UnmarshallProva { public static void main(String[
我有一个 XMLEventReader。它是使用“UTF8”编码从 XMLInputFactory 构建的。我用它来读取“encoding”属性设置为“UTF-8”的 XML 文件。 我已验证 XML
我正在使用 XMLInputFactory 解析传入的 XML 文件,如下所示。如何从 XML 注释中获取文本?我知道如何检测它,但无法将文本输出 XMLInputFactory inputFacto
我有一些现有代码可以解析顶级元素命名空间以确定我们正在查看的 XML 文件类型。 XMLEventReader reader = createXMLEventReader(...); try {
随 Java 一起提供的 Xerces 版本有 bug when dealing with empty XML elements for XML version 1.1 input 。此错误早已在 A
我想编写一些基本上类似于 Reading a big XML file using stax and dom 的代码但使用 XMLEventReader 而不是 XMLStreamReader(我需要
我的环境正在运行 JAVA 1.5 并以这种方式将 JAXB 2.2.7 放入我的 POM 文件中。 javax.xml.bind jaxb-api 2.2.7 但是,当我
谁能解释一下为什么这段代码不能编译: import java.io.FileInputStream; import javax.xml.stream.XMLEventReader; import ja
我正在使用 Stax XML EventReader 来读取 xml。我必须验证 xml 中的一些标签,我正在使用相同的标签。我能够成功读取 xml 中的标记名和字符,但无法读取属性名称和值。我使用的
我无法检查 XML 中的 CDATA 并使用 XMLEventReader 读取它。 以下是示例: HEADERS
为什么 XMLEventReader 扩展原始 Iterator?由于 XMLEventReader.next() 返回 Object,我们必须使用显式转换。不应该是这样吗: public inter
我是一名优秀的程序员,十分优秀!