我正在尝试使用 STAX 解析 XML 文件。我正在使用事件:
-XMLStreamConstants.START_ELEMENT
-XMLStreamConstants.CHARACTERS
-XMLStreamConstants.END_ELEMENT
是否有任何事件或“棘手的方法”来检测 XML 中数组的存在?主要问题是我不知道正在解析的 XML 的格式,它可以是任何格式的任何 XML。
请注意,我不想使用其他库,因为 XML 文件很大,而且我不想将所有文件加载到内存中。
在 json reader 中我们有事件:
-BEGIN_ARRAY
-END_ARRAY
所以我正在寻找一种类似的方法来使用 STAX 检测 XML 中数组的开头。
谢谢
最佳答案
一个Stack<String>
嵌套元素,如书籍、章节、段落、句子。在元素的开始和结束 push/pop
入栈/出栈,记住前一个元素,并将重复的元素放入“数组”中,即 List<Object>
, json [...]
,其中对象可能是 Map<String, Object>
, json { field: ..., ... }
.
<book>
<author />
<chapter>
<paragraph>
<sentence>
<sentence>
Map
"book" : Map
"author" : String
"chapter" : List
Map
"paragraph" : List
Map
"sentence" : List
String
String
Stack<String> tagNesting = new Stack<>();
String priorTag = "";
Map<String, Object> parentValue;
通常每个元素都是一个带有 XML 属性和 XML 子元素作为条目的 Map(LinkedHashMap 将保留顺序)。使用键 "@" + name
放置属性,以及带有键 name
的元素.
如果一个元素重复,请检查先前的条目(Map,或已经是List)并向其添加广告,这样就有一个List。
关于java - 如何使用 stax 检测 java 中的 xml 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55949103/