"/>
首页 \ 问答 \ Java:基于元素数量的XML数据保存(Java : XML Data Saving based on number of elements)

Java:基于元素数量的XML数据保存(Java : XML Data Saving based on number of elements)

假设我有这个XML文件: -

<logExtract>
    <query id="1">
        <otsdb_elements>
            <metricname>linecount</metricname>
            <tags>splunk_server</tags>
        </otsdb_elements>
    <splunk_query>
        <query_syn>index=_internal source=*/splunkd_access.log |head 10000</query_syn>
    </splunk_query>
</query>
<query id="2">
    <otsdb_elements>
        <metricname>line_count</metricname>
        <tags>splunk_server1</tags>
    </otsdb_elements>
    <splunk_query>
        <query_syn>index=_internal source=*/splunkd_access.log |head 100</query_syn>
    </splunk_query>
</query>

假设我从XML解析这些数据,我想将这个XML文件中的数据保存到变量(数组,列表,散列图等)。

防爆。

a[0][0]=1

a[0][1]=linecount

a[0][2]=splunk_server

a[0][3]=index=....

b[0][0]=2

b[0][1]=line_count

b[0][2]=splunk_server1

b[0][3]=index=....

仅供参考 : - 此处数组表示仅供参考 。 我不知道要使用哪个Java Collection。

要使用什么Java Collection? 如何 ?

仅供参考 : - 如果我解析数据并直接将它们添加到HaspMap中,它将被最后的<query>标记覆盖。


Suppose i have this XML File:-

<logExtract>
    <query id="1">
        <otsdb_elements>
            <metricname>linecount</metricname>
            <tags>splunk_server</tags>
        </otsdb_elements>
    <splunk_query>
        <query_syn>index=_internal source=*/splunkd_access.log |head 10000</query_syn>
    </splunk_query>
</query>
<query id="2">
    <otsdb_elements>
        <metricname>line_count</metricname>
        <tags>splunk_server1</tags>
    </otsdb_elements>
    <splunk_query>
        <query_syn>index=_internal source=*/splunkd_access.log |head 100</query_syn>
    </splunk_query>
</query>

Suppose i parse this data from XML and i want to save data from this XML file in to variable(array, list , hashmap whatever).

Ex.

a[0][0]=1

a[0][1]=linecount

a[0][2]=splunk_server

a[0][3]=index=....

b[0][0]=2

b[0][1]=line_count

b[0][2]=splunk_server1

b[0][3]=index=....

FYI :- here array representation is just for example. I dont know which Java Collection to use.

What Java Collection to be used? and how ?

FYI :- If i parse the data and add them in HaspMap directly it will overridden by last <query> tag.


原文:https://stackoverflow.com/questions/32762312
更新时间:2024-01-02 21:01

最满意答案

附加到字符串时,必须复制它。 如果你想象附加n个片段,你最终会制作大约n * n个副本。 如果n很大,这很慢。

你也选择了一种缓慢的追加方式。 它会更快说:

let append s = str := !str ^ s ^ "\n"

使用Buffer而不是String可能更好。 如果您知道字符串的最终大小,则可以预先分配正确大小的缓冲区。 它还可以更好地包装可变状态。

更新

这是使用Buffer的一些简单代码:

let buf = Buffer.create 1024

let append s =
    Buffer.add_string buf s;
    Buffer.add_char buf '\n'

let getstring () =
    Buffer.contents buf

这是一个会议:

$ ocaml
        OCaml version 4.00.1

# #use "b.ml";;
val buf : Buffer.t = <abstr>
val append : string -> unit = <fun>
val getstring : unit -> string = <fun>
# append "abc";;
- : unit = ()
# append "def";;
- : unit = ()
# getstring ();;
- : string = "abc\ndef\n"

对于它的价值,我会尝试写出比这更多的功能。 也就是说,我会将缓冲区传递给想要使用它的函数,而不是将buf作为全局变量。


When you append to a string, you have to copy it. If you imagine appending n pieces, you end up making roughly n*n copies of them. This is slow if n is big.

You're also choosing a slow way to append. It would be faster to say:

let append s = str := !str ^ s ^ "\n"

It might be better to use Buffer instead of String. If you have an idea of the final size of your string you can pre-allocate a buffer of the right size. It also wraps up the mutable state a little more nicely.

Update

Here's some simple code using Buffer:

let buf = Buffer.create 1024

let append s =
    Buffer.add_string buf s;
    Buffer.add_char buf '\n'

let getstring () =
    Buffer.contents buf

Here's a session:

$ ocaml
        OCaml version 4.00.1

# #use "b.ml";;
val buf : Buffer.t = <abstr>
val append : string -> unit = <fun>
val getstring : unit -> string = <fun>
# append "abc";;
- : unit = ()
# append "def";;
- : unit = ()
# getstring ();;
- : string = "abc\ndef\n"

For what it's worth I would try to write more functionally than this. I.e., I would pass the buffer around to the functions that want to use it rather than making buf a global variable.

相关问答

更多

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。