簡體   English   中英

Java 流式 XML 解析器能否區分空元素和自閉合空元素?

[英]Can the Java streaming XML parser distinguish empty element from self-closing empty element?

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實現這個目標嗎?

答案是不。 同樣,您不能在標記中保留空格(例如,屬性值之間的換行符或“=”符號周圍的空格)。 這些被認為對應用程序不感興趣,因此不會被報告。

您可以測試 startevent 和 endevent 是否具有相同的位置

event.getLocation().getCharacterOffset();

來自javadoc

返回此位置指向的輸入源中的字節或字符偏移量。 如果輸入源是文件或字節流,則這是該流中的字節偏移量,但如果輸入源是字符媒體,則偏移量是字符偏移量。 如果沒有可用的偏移量,則返回 -1。

不保證偏移量可用,但這應該取決於您的設置,如果它在您的設置中有效,則值得一試。 (它也只能表示最大為Integer.MAX_VALUE的偏移量)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM