java - 如何使用 stax 检测 java 中的 xml 数组?

标签 java arrays xml stax

我正在尝试使用 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/

相关文章:

javascript - JSON 字符串转 JS 数组

c - 数组的单个括号中的嵌套索引

xml - xsd:boolean 元素类型接受 "true"但不接受 "True"。我怎样才能让它接受它?

android - 在 android 上展开布局时无法设置图像

java - JVM JIT 实际做什么的任何例子?

java - 将字节分成两个较小的数字

java - 在 Java 中循环遍历一个 ArrayList 和另一个 Arraylist

java - 使用 JAXB 解码嵌套元素

java - 在 Intellij IDEA 中设置 JMonkeyEngine

java - 截去小数点