先贴结果:把data.xml中的红线标注提取并输出到printdata.xml中
data.xml:
左边为拼音,右边为原文本,如果有重复的,就左边右边输出相同的
printdata.xml:
不多说了直接进入整题
1、这里主要引入两个 jar 包 一个是 拼音转汉字的jar包,一个是java读取xml文件的jar包 。下文中会放这两个包的链接。
2、贴代码,这个代码写的有点冗余,不过功能还是能实现的。后续在改改吧。
//输出结果
@Test
public void readXml() throws Exception {
SAXBuilder saxBuilder = new SAXBuilder();
List<String> finalList = new ArrayList<>();
List<String> finalList2 = new ArrayList<>();
//构造文档对象
File file = new File("x:\\xxx\\xxx\\printdata.xml" );
//Document document = (Document) saxBuilder.build("C:\\IDEAprojects\\ccic\\data.xml");//亦可
FileWriter writerout = new FileWriter (file.getName(),false);
BufferedWriter bufferWritter = new BufferedWriter(writerout);
//意思是获得当前对象所属的class对象的类装载器,其中的getResourceAsStream的参数是默认则是从ClassPath根下获取,
//path不能以’/'开头,最终是由ClassLoader获取资源。
Document document = (Document) saxBuilder.build(test.class.getClassLoader().getResourceAsStream("data1.xml"));
//获取根元素
Element root = document.getRootElement();
System.out.println(root.getName());
//获取名字为view的所有元素
List list = root.getChildren("view");
System.out.println(list); //[[Element: <view/>]]
for(int i = 0; i < list.size(); i++) {
Element element = (Element) list.get(i);
List<Element> form = element.getChildren("form");
System.out.println(form); //[[Element: <form/>]]
for (int j = 0; j < form.size(); j++) {
Element element1 = form.get(j);
List<Element> dataGrid = element1.getChildren("DataGrid");
System.out.println(dataGrid);//[[Element: <DataGrid/>]]
for (int k = 0; k < dataGrid.size(); k++) {
Element element2 = dataGrid.get(k);
List<Element> DataRowlist = element2.getChildren("DataRow");
System.out.println(DataRowlist);//[[Element: <DataRow/>]]
for (int m = 0; m < DataRowlist.size(); m++) {
Element element3 = DataRowlist.get(m);
String dataCell = element3.getName();
System.out.println(dataCell);//DataRow
List<Element> DataCelllist = element3.getChildren("DataCell");
System.out.println(DataCelllist);//[[Element: <DataCell/>], [Element: <DataCell/>], [Element: <DataCell/>], [Element: <DataCell/>], [Element: <DataCell/>], [Element: <DataCell/>], [Element: <DataCell/>]]
for (int n = 0;<