【问题标题】:How to detect xml arrays in java using stax?java - 如何使用stax检测java中的xml数组?
【发布时间】:2019-05-02 09:10:08
【问题描述】:

我正在尝试使用 STAX 解析 XML 文件。我正在使用事件:

-XMLStreamConstants.START_ELEMENT
-XMLStreamConstants.CHARACTERS
-XMLStreamConstants.END_ELEMENT

是否有任何事件或“棘手的方法”来检测 XML 中数组的存在?主要问题是我不知道被解析的 XML 的格式,它可以是任何格式的任何 XML。

请注意,我不想使用其他库,因为 XML 文件很大,我不想将所有文件加载到内存中。

在 json reader 中我们有事件:

-BEGIN_ARRAY
-END_ARRAY

所以我正在寻找一种类似的方法来使用 STAX 检测 XML 中数组的开头。

谢谢

【问题讨论】:

    标签: java arrays xml stax


    【解决方案1】:

    嵌套元素的Stack<String>,如书籍、章节、段落、句子。在元素push/pop 的开始和结束进入/离开堆栈时,记住前一个元素,并将重复的元素放入“数组”中,List<Object>,json [...],其中 Object 可能是 Map<String, Object>,json @ 987654326@.

    <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;
    

    通常每个元素都是一个 Map(LinkedHashMap 会保持顺序),其中包含 XML 属性和 XML 子元素作为条目。用"@" + name键放置属性,用name键放置元素。

    如果一个元素是重复的,检查前面的条目(Map,或者已经是List)并添加到它,所以有一个List。

    【讨论】:

      猜你喜欢
      • 2012-03-20
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多