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
最满意答案
附加到字符串时,必须复制它。 如果你想象附加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.
相关问答
更多-
TCP/IP模型是一个________。[2023-05-19]
a -
下列中不属于面向对象的编程语言的是?[2022-05-30]
a -
bool green = false; bool red = true; bool purple = true; bool orange = false; bool black = true; bool blue = true; bool brown = false; var bools = new Dictionary
{ { $"{nameof(green)}", green} ,{ $"{nameof(red)}", red} ,{ $"{nam ... -
从Java中的多个字符串构建标记列表的有效方法(Effective way to build a list of tokens from multiple strings in Java)[2022-08-22]
如果你有小字符串并且性能不是问题,你可以将split与addAll结合使用,如下所示: String s1 = "My mom cook everyday"; String s2 = "I eat everyday"; String s3 = "Am I fat?"; Listtokens = new ArrayList (); tokens.addAll(Arrays.asList(s1.split("\\s+"))); tokens.addAll(Arrays. ... -
字符串拆分的有效方法(Effective way of String splitting)[2022-01-13]
听到你去了我使用正则表达式和合理数量的文本他们预先形成。 static void Main(string[] args) { string str = @"N:Pay in Cash++RGI:40++R:200++T:Purchase++IP:N++IS:N++PD:PC++UCP:598.80++UPP:0.00++TCP:598.80++TPP:0.00++QE:1++QS:1++CPC:USD++PPC:Points++D:Y++E:Y++IFE:Y++AD:Y++IR:++MV:++CP ... -
“如何删除除字母以外的其他字符?” 我想你不想实际删除它,只是跳过它,你可以使用isalpha这样做。 另请注意,条件ptr2 > ptr1仅适用于具有偶数字符的字符串,如abba ,但对于字符串(如abcba ,条件应为ptr2 >= ptr1 : int palindrome(char* string) { size_t len = strlen(string); // handle empty string and string of length 1: if (len == ...
-
构建字符串的有效方法(effective way to build a string)[2022-12-20]
附加到字符串时,必须复制它。 如果你想象附加n个片段,你最终会制作大约n * n个副本。 如果n很大,这很慢。 你也选择了一种缓慢的追加方式。 它会更快说: let append s = str := !str ^ s ^ "\n" 使用Buffer而不是String可能更好。 如果您知道字符串的最终大小,则可以预先分配正确大小的缓冲区。 它还可以更好地包装可变状态。 更新 这是使用Buffer的一些简单代码: let buf = Buffer.create 1024 let append s = ... -
>>> a = '123456' >>> print a.split('2', 1)[0] 1 >>> print a.split('4', 1)[0] 123 >>> 但是,如果您正在处理CSV文件,那么: import csv with open('some.csv') as fin: for row in csv.reader(fin): print int(row[0]) 并且csv模块将处理包含引号等的引用列... >>> a = '123456' >>> print ...
-
$watch只会在被观看的值发生变化时触发。 在这种情况下,最好观察dimension ,因为这是正在改变的选择。 然后,您可以重新分配URL的dimension部分并重新构建。 这是一个更新的小提琴 。 JS: $scope.buildUrl = function () { $scope.url.dimension = $scope.dimension.value; $scope.completeUrl = $scope.url.base + "dateFrom=" + $scope.ur ...
-
动态构建html字符串(build html string dynamically)[2020-08-16]