問題描述
我正在嘗試讀取 XML(無論如何,我不知道它的結構,bcz 我正在從服務器讀取文件.),我在 SO 上進行了很多搜索.但沒有發現任何有用的東西.
I'm trying to read XML(whatever, i don't know it's structure, bcz i'm reading flie from server.), and i searched a lot on SO. but not found anything helpful.
1> 我想檢索 XML 的節點名稱,從根目錄到文件末尾、子節點或子節點的子節點,直到沒有子節點或兄弟節點.
1> i want to retrieve XML's node name, starting from root to end of file, child or child of child untill there's no child or sibling remaining.
2> 在類似的問題中,我發現他們使用標記名來檢索該標記的值,所以我想在其中傳遞該節點名以獲取值...
2> in similar question, i found that they use tagname to retrieve value of that tag, so i want to pass that node name inside this to get value...
是否可以動態進行.或者必須遵循與之前問題相同的結構,例如靜態添加標記名以檢索值.
is it possible to do dynamically. or have to follow same structure as in previous questions like statically add tagname to retrieve value.
在java中完成后,我想創建可執行jar,并想在歡樂中使用它.
after doing this in java, i want to create executable jar, and want to use it in mirth.
編輯我想找到元素,它的值是這樣的,在第一個條件下,我正在循環我的數組列表,我命名為 masterheader
,其中包含所有標簽名稱,在第二個循環中,我將從中查找節點名稱xml,并且在這兩個 for 循環中,我指定了一個條件,如果兩者都匹配,則它獲取節點名稱并將值存儲為分隔形式,因為我想將其轉換為 csv
.
EDIT
i want to find element and it's value such that, in first condition i'm looping my arraylist which i named masterheader
which contain all tag name, and in second loop i'm going to find node name from xml, and and inside that two for loop i specified one condition, if both match, then it get node name and it store a value in , separated form, because i want to convert it in csv
.
這里,masterheader 和 childheader 是 arraylist
.masterheader 默認包含所有標頭.我們將在 childheader
中添加節點名,如果兩者都匹配,那么我們在結果字符串中添加值.例如masterheader = [員工姓名、員工姓名、父親姓名、手機、工資]
而在childheader = [employeename, mobile,salary]
//這是基于xml解析的.
here, masterheader and childheader is arraylist
. masterheader contain all header by default. and we gonna add nodename in childheader
, nd if both match then we add value in result string.
for e.g. masterheader = [employeename, employeesurname, fathername, mobile, salary]
and in childheader = [employeename, mobile, salary]
//this is based on xml parsing.
for(i=0;i<masterheader.size();i++)
{
for(j=0;j<childheader.size();j++)
{
if((masterheader[i]).equals(childheader[j]))
{
//get the value of that node, + ","
}
else
{
count++
}
}
if(count==childheader.size()){
//add into result string +null+","
}
}
推薦答案
您可以為此目的使用 StAX 解析器.
You could use a StAX parser for this purpose.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employees count="4">
<employee>
<id>2</id>
<firstName>Jane</firstName>
<lastName>Doe</lastName>
<income>20000.0</income>
</employee>
<employee>
<id>3</id>
<firstName>Alfred</firstName>
<lastName>Pennyworth</lastName>
<income>30000.0</income>
</employee>
<employee>
<id>4</id>
<firstName>Tony</firstName>
<lastName>Stark</lastName>
<income>40000.0</income>
</employee>
<employee>
<id>42</id>
<firstName>Foo</firstName>
<lastName>Bar</lastName>
<income>15.0</income>
</employee>
</employees>
Java 代碼
try (InputStream stream = new FileInputStream("employees.xml")) {
XMLInputFactory inputFactory = XMLInputFactory.newFactory();
inputFactory.setProperty(XMLInputFactory.IS_COALESCING, true);
XMLStreamReader reader = inputFactory.createXMLStreamReader(stream);
while (reader.hasNext()) {
switch (reader.next()) {
case XMLStreamConstants.START_ELEMENT:
System.out.println("Start " + reader.getName());
for (int i = 0, count = reader.getAttributeCount(); i < count; i++) {
System.out.println(reader.getAttributeName(i) + "=" + reader.getAttributeValue(i));
}
break;
case XMLStreamConstants.END_ELEMENT:
System.out.println("End " + reader.getName());
break;
case XMLStreamConstants.CHARACTERS:
case XMLStreamConstants.SPACE:
String text = reader.getText();
if (!text.trim().isEmpty()) {
System.out.println("text: " + text);
}
break;
}
}
}
請注意,您可以輕松修改 START_ELEMENT
大小寫以將標記名稱與某個值進行比較.(如果您只想檢查這些元素,可能您可以忽略任何其他情況.)
Note that you could easily modify the START_ELEMENT
case to compare the tag name to some value. (Probably you could ignore any other cases if you only want to check those elements.)
Start employees
count=4
Start employee
Start id
text: 2
End id
Start firstName
text: Jane
End firstName
Start lastName
text: Doe
End lastName
Start income
text: 20000.0
End income
End employee
Start employee
Start id
text: 3
End id
Start firstName
text: Alfred
End firstName
Start lastName
text: Pennyworth
End lastName
Start income
text: 30000.0
End income
End employee
Start employee
Start id
text: 4
End id
Start firstName
text: Tony
End firstName
Start lastName
text: Stark
End lastName
Start income
text: 40000.0
End income
End employee
Start employee
Start id
text: 42
End id
Start firstName
text: Foo
End firstName
Start lastName
text: Bar
End lastName
Start income
text: 15.0
End income
End employee
End employees
這篇關于在java中動態讀取xml元素和值的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!