Java流式XML解析器,即javax.xml.stream.XMLEventReader能否区分空元素
<document>
<empty></empty>
<document>
来自一个自我关闭的空元素?
<document>
<empty/>
<document>
让我们假设我们解析上述两个xml片段并打印eventType和事件本身,就像这样:
System.out.println("eventType:" + event.getEventType() + "; element:"+event.toString());
上述两个片段都会产生完全相同的结果:
eventType:7; element:<?xml version="null" encoding='null' standalone='no'?>
eventType:1; element:<document>
eventType:4; element:
eventType:1; element:<empty>
eventType:2; element:</empty>
eventType:2; element:</document>
eventType:8; element:ENDDOCUMENT
为了给出一些上下文,我们想要实现的是,我们想要根据一些规则重写xml的某些部分,但是想要保留其他部分,就像我们想要保留空元素一样尽管这两种形式在语义上是相同的,但它们的原始形式仍然存在。如果我们有一个普通的空元素(第一个例子),我们希望保持这种方式,如果我们有一个自闭合的空元素,我们也想在结果中写一个自闭元素。我们可以使用javax.xml.stream.XMLEventReader来实现这一目标吗?
答案 0 :(得分:1)
答案是否定的。同样,您无法在标记内保留空格(例如,属性值之间的换行符,或&#34; =&#34;符号周围的空格)。这些被认为对申请不感兴趣,因此不予报告。
答案 1 :(得分:0)
您可以测试startevent和endevent是否具有相同的位置
reader.getLocation().getCharacterOffset();
来自javadoc
将字节或字符偏移量返回到此位置指向的输入源。如果输入源是文件或字节流,那么这是该流的字节偏移量,但如果输入源是字符媒体,则偏移量是字符偏移量。如果没有可用的偏移量,则返回-1。
不保证偏移量可用,但这取决于您的设置,如果它适用于您的设置值得一试。 (它也只能表示最多Integer.MAX_VALUE
)