我想读取嵌套元素并将所有元素和数据分配给二维数组。
在以下xml示例中,元素为<M-1>,<M-11>,<M-111>,<M-2>,<M-22>,<M-3>
,数据为m111,m22,m3
。
我希望转移到2D数组,就像String array[][] = {{"M-1","M-11","M-111","m111"},{"M-2","M-22","m22"},{"M-3","m3"}};
谢谢。
<MENU>
<M-1>
<M-11>
<M-111>m111</M-111>
</M-11>
</M-1>
<M-2>
<M-22>m22</M-22>
</M-2>
<M-3>m3</M-3>
...
</MENU>
答案 0 :(得分:0)
我已经解决了。这是一个非常复杂的。
XML:
<M><A_1.1><A_1.2><A_1.3><A_1.4><A_1.5><A_1.6><A_1.7>Content-1A</A_1.7></A_1.6></A_1.5></A_1.4></A_1.3></A_1.2></A_1.1><B_2.1><B_2.2><B_2.3><B_2.4><B_2.5>Content-2B</B_2.5></B_2.4></B_2.3></B_2.2></B_2.1><C_3.1><C_3.2><C_3.3><C_3.4><C_3.5><C_3.6><C_3.7><C_3.8><C_3.9><C_3.10>Content-3C</C_3.10></C_3.9></C_3.8></C_3.7></C_3.6></C_3.5></C_3.4></C_3.3></C_3.2></C_3.1><D_4.1><D_4.2><D_4.3>Content-4D</D_4.3></D_4.2></D_4.1><E_5.1>Content-5E</E_5.1><F_6.1><F_6.2>Content-6F</F_6.2></F_6.1><G_7.1><G_7.2><G_7.3><G_7.4>Content-7G</G_7.4></G_7.3></G_7.2></G_7.1></M>
爪哇:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XmlReader1 {
public XmlReader1() {
try {
String str = ""; String strAdd;
String bR = "<(?!/)(.*?)>";
String pR = ">(?!<)(.*?)<(/.*?)>";
File file = new File("E:\\test\\b.xml");
BufferedReader br = null;
int s1 = 0; int s2 = 0; int s3 = 0; int s31 = 0; int mb = 0; int mp = 0;
//dosyadan verinin çekilip str stringine atanması.
br = new BufferedReader(new FileReader(file));
while ((strAdd = br.readLine()) != null) {
str += strAdd;
}
Pattern pattern1 = Pattern.compile(bR);
Matcher matcher1 = pattern1.matcher(str);
Pattern pattern2 = Pattern.compile(pR);
Matcher matcher2 = pattern2.matcher(str);
Pattern pattern3 = Pattern.compile(bR);
Matcher matcher3 = pattern3.matcher(str);
Pattern pattern4 = Pattern.compile(pR);
Matcher matcher4 = pattern4.matcher(str);
//dosyadaki elementlerin(<...>) sayılması.
while (matcher1.find()) {
mb++;
}
//dosyadaki çocuk elementlerin(<...>child</..>) sayılması.
while (matcher2.find()) {
mp++;
}
//elementler dizisi.
String mB[] = new String[mb];
//çocuk elemanlar dizisi.
String mP[] = new String[mp];
//dosyadaki elementlerin mP[] dizisine atanması.
while (matcher4.find()) {
mP[s2] = matcher4.group(1);
s2++;
}
//dosyadaki çocuk elemanların mB[] dizisine atanması.
while (matcher3.find()) {
mB[s1] = matcher3.group(1);
s1++;
}
//dom parser işlemleri.
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new FileInputStream(file));
NodeList nL = doc.getElementsByTagName(doc.getDocumentElement().getNodeName());
Node nD = nL.item(0);
Element eL = (Element) nD;
int big[] = new int[mp];
//element gruplarının kaç kişi olduğunun bulunması.
for (int i = 0; i < mp; i++) {
for (int j = 1; j < mb; j++) {
String a = eL.getElementsByTagName(mB[j]).item(0).getTextContent();
String b = mP[i];
if (a.equals(b)) {
s3++;
}
}
big[i] = s3;
s3 = 0;
}
//2 boyutlu ana dizinin dinamik sütun sayıları belirtilmeden tanımlanması.
String add[][] = new String[mp][];
//ana diziye element ve elemanların birbirine bağlanarak atanması.
for (int i = 0; i < mp; i++) {
//ana dizinin sütun sayısı, her element-eleman grubunun sayısına göre oluşturulması.
add[i] = new String[big[i]+1];
//ana diziye elementleri ekleme işlemi.
for (int j = 1; j < mb; j++) {
//verilen mB[] dizisindeki elementin ismine göre, o elementin çocuğunun bulunması.
String a = eL.getElementsByTagName(mB[j]).item(0).getTextContent();
//çocuk elemanlar dizisi.
String b = mP[i];
//String a'daki ortak çocuğa sahip elementlerin aynı dalda gruplandırılması.
if (a.equals(b)) {
add[i][s3] = mB[j];
s3++;
}
}
//gruplanan elementlere çocukların eklenmesi.
add[i][s3] = mP[i];
s3 = 0;
}
//ana dizinin yazdırılması.
for (int i = 0; i < add.length; i++) {
for (int j = 0; j < add[i].length; j++) {
System.out.println(add[i][j]);
}
}
} catch (Exception e) {
System.err.println("Hata!");
}
}
public static void main(String[] args){
XmlReader1 x = new XmlReader1();
}
}
屏幕:
A_1.1
A_1.2
A_1.3
A_1.4
A_1.5
A_1.6
A_1.7
Content-1A
B_2.1
B_2.2
B_2.3
B_2.4
B_2.5
Content-2B
C_3.1
C_3.2
C_3.3
C_3.4
C_3.5
C_3.6
C_3.7
C_3.8
C_3.9
C_3.10
Content-3C
D_4.1
D_4.2
D_4.3
Content-4D
E_5.1
Content-5E
F_6.1
F_6.2
Content-6F
G_7.1
G_7.2
G_7.3
G_7.4
Content-7G