使用Java将XML转换为自定义Excel
我需要关于如何使用Java将XML转换为自定义Excel的建议 我需要使用自定义布局将XML转换为Excel。我找到了一个,它似乎可以帮助完成这项任务。但我没有这样的经验,据我所知,POI在内存树(如DOM)中工作得最好。我开始分析我的XML(我可以展示其中的一小部分,它非常大而且深入)使用Java将XML转换为自定义Excel,java,excel,xml-parsing,apache-poi,Java,Excel,Xml Parsing,Apache Poi,我需要关于如何使用Java将XML转换为自定义Excel的建议 我需要使用自定义布局将XML转换为Excel。我找到了一个,它似乎可以帮助完成这项任务。但我没有这样的经验,据我所知,POI在内存树(如DOM)中工作得最好。我开始分析我的XML(我可以展示其中的一小部分,它非常大而且深入) 名称1 姓名2 名字3 名字4 名字6 1. 2. 3. 4. 6. 通过使用DOM,就像我在一个在线教程中看到的那样 Document xmlDoc = getDocument("./sr
名称1
姓名2
名字3
名字4
名字6
1.
2.
3.
4.
6.
通过使用DOM,就像我在一个在线教程中看到的那样
Document xmlDoc = getDocument("./src/xmlForTest.xml");
xmlDoc.getDocumentElement().normalize();
System.out.println("Root element of the doc is :\" "+ xmlDoc.getDocumentElement().getNodeName() + "\"");
NodeList listOfAdvantage = xmlDoc.getElementsByTagName("advantage"); //first we need to find total number of Advantage blocks
int totalAdvantage = listOfAdvantage.getLength();
System.out.println("Total no of advantage : " + totalAdvantage);
for (int s = 0; s < listOfAdvantage.getLength(); s++) //get into advantage
{
Node AdvantageNode = listOfAdvantage.item(s);
System.out.println("advantage number : " + s);
if (AdvantageNode.getNodeType() == Node.ELEMENT_NODE)
{
Element AdvantageElement = (Element) AdvantageNode;
NodeList CompanyList = AdvantageElement.getElementsByTagName("companies"); // find node companies
System.out.println("companies number : " + CompanyList.getLength());
for(int cl = 0; cl < CompanyList.getLength(); cl++) {
NodeList CompanyNameList = CompanyList.item(cl).getChildNodes(); //AdvantageElement.getElementsByTagName("name");
for (int j = 0; j < CompanyNameList.getLength(); j++) {
Node childNode = CompanyNameList.item(j);
if ("name".equals(childNode.getNodeName())) {
for (int nl = 0; nl < CompanyNameList.getLength(); nl++) {
Element CompanyNameElement = (Element) CompanyNameList.item(nl);
NodeList textFNList = CompanyNameElement.getChildNodes();
System.out.println("Company: " + nl + " :" + (textFNList.item(0)).getNodeValue().trim());
CompaniesNames.add((textFNList.item(0)).getNodeValue().trim());
}
}
}
}
}// end of if clause
}// end of for loop with s var
documentxmldoc=getDocument(“./src/xmlForTest.xml”);
xmlDoc.getDocumentElement().normalize();
System.out.println(“文档的根元素是:\”“+xmlDoc.getDocumentElement().getNodeName()+”\”);
NodeList listOfAdvantage=xmlDoc.getElementsByTagName(“advantage”)//首先,我们需要找到优势区块的总数
int totalAdvantage=listOfAdvantage.getLength();
System.out.println(“优势总数:+totalAdvantage”);
对于(int s=0;s
现在我有几个问题
因此,您向我们提出的问题是:如何将我们不知道确切结构的XML转换为我们也不知道其结构的Excel文件?我唯一能告诉您的是:首先确定XML的确切结构和所需Excel工作表的确切结构。例如:您的XML有不同的公司。每个公司是否应在Excel表格中显示一行?如果是,其他数据如何分配给公司行?然后,您的程序将使用解析器读取XML,并使用POI编写Excel工作表。顺便说一句:“POI最适用于内存中的树,如DOM”:否,需要写入包含数据所在单元格的行。因此,Excel工作表和POI的结构更像是一个数据库表,其中包含数据记录行和单元格,这些行类似于数据记录中的数据字段。因此,您向我们提出的问题是:如何将一个我们不知道确切结构的XML转换为一个我们也不知道其结构应该是什么样的Excel文件?我唯一能告诉您的是:首先确定XML的确切结构和所需Excel工作表的确切结构。例如:您的XML有不同的公司。每个公司是否应在Excel表格中显示一行?如果是,其他数据如何分配给公司行?然后,您的程序将使用解析器读取XML,并使用POI编写Excel工作表。顺便说一句:“POI最适用于内存中的树,如DOM”:否,需要写入包含数据所在单元格的行。因此,Excel工作表和POI的结构更像是一个数据库表,其中包含数据记录行和单元格,这些行类似于数据记录中的数据字段。
Document xmlDoc = getDocument("./src/xmlForTest.xml");
xmlDoc.getDocumentElement().normalize();
System.out.println("Root element of the doc is :\" "+ xmlDoc.getDocumentElement().getNodeName() + "\"");
NodeList listOfAdvantage = xmlDoc.getElementsByTagName("advantage"); //first we need to find total number of Advantage blocks
int totalAdvantage = listOfAdvantage.getLength();
System.out.println("Total no of advantage : " + totalAdvantage);
for (int s = 0; s < listOfAdvantage.getLength(); s++) //get into advantage
{
Node AdvantageNode = listOfAdvantage.item(s);
System.out.println("advantage number : " + s);
if (AdvantageNode.getNodeType() == Node.ELEMENT_NODE)
{
Element AdvantageElement = (Element) AdvantageNode;
NodeList CompanyList = AdvantageElement.getElementsByTagName("companies"); // find node companies
System.out.println("companies number : " + CompanyList.getLength());
for(int cl = 0; cl < CompanyList.getLength(); cl++) {
NodeList CompanyNameList = CompanyList.item(cl).getChildNodes(); //AdvantageElement.getElementsByTagName("name");
for (int j = 0; j < CompanyNameList.getLength(); j++) {
Node childNode = CompanyNameList.item(j);
if ("name".equals(childNode.getNodeName())) {
for (int nl = 0; nl < CompanyNameList.getLength(); nl++) {
Element CompanyNameElement = (Element) CompanyNameList.item(nl);
NodeList textFNList = CompanyNameElement.getChildNodes();
System.out.println("Company: " + nl + " :" + (textFNList.item(0)).getNodeValue().trim());
CompaniesNames.add((textFNList.item(0)).getNodeValue().trim());
}
}
}
}
}// end of if clause
}// end of for loop with s var