我正在将XML文件作为输入(文件中的数据就像书的索引页,包含章节名称和其他一些信息),我使用我的代码从中检索几个值。我从文件中得到的三个值是:
Title (a long string of title to the chapter)
Number (chapter number)
ID (This is an ID associated with chapter, format: xxx-yy-zzz)
我需要做的是将这些值存储在Excel工作表的5个不同列中(通过在连字符周围拆分ID,其中ID的每个部分都是不同的子ID)。
所以,我迭代文件,获取标题,数字和ID,并将它们连接在一起,并在它们之间使用“ - ”,使它看起来像一个格式的字符串
标题 - 数字 - SubID1-SubID2-SubID3
然后我将这些字符串中的每一个添加到列表中,我稍后会迭代,从“ - ”拆分并获取5个值中的每一个并写入Excel工作表。
我的文件有113个独特的出现次数,但我只是注意到在我的Excel工作表中我只获得了103个唯一的出现次数,10个值是重复的。不知何故,应该在那里的10个值不在表格中。我对发生的事情感到很困惑。
编辑:
这是我获取我发送的每个ID以及XML文档的字符串。
public static String getBooksFromDoc(Document doc, String id)
throws Exception {
String idset = null;
String title = null;
String num = null;
doc.getDocumentElement().normalize();
XPath xPath = XPathFactory.newInstance().newXPath();
XPathExpression xPathExpr = (XPathExpression) xPath
.compile("//document[@id ='" + id + "']");
NodeList nlist = (NodeList) xPathExpr.evaluate(doc,
XPathConstants.NODESET);
for (int i = 0; i < nlist.getLength(); i++) {
rulebookProp = new RulebookProperties();
Node nnode = nlist.item(i);
XPathExpression xPath1 = (XPathExpression) xPath
.compile(".//idset");
Element eelement = (Element) nnode;
Node idNode = (Node) xPath1.evaluate(eelement, XPathConstants.NODE);
idset = idNode.getFirstChild().getNodeValue();
XPathExpression xPath2 = (XPathExpression) xPath
.compile(".//title");
Element eelement1 = (Element) nnode;
Node idNode1 = (Node) xPath2.evaluate(eelement1,
XPathConstants.NODE);
if (idNode1 == null) {
title = " ";
} else {
title = idNode1.getFirstChild().getNodeValue();
}
XPathExpression xPath3 = (XPathExpression) xPath
.compile(".//number");
Element eelement2 = (Element) nnode;
Node idNode2 = (Node) xPath3.evaluate(eelement2,
XPathConstants.NODE);
if (idNode2 == null) {
num = " ";
} else {
num = idNode2.getFirstChild().getNodeValue();
}
}
return title + "-" + num + "-" + idset;
}
我将每个返回的字符串添加到列表中。
List<String> books = new ArrayList<String>();
books.add(getBooksFromDoc(xmlDoc, id);
这是我使用列表获取5个值的方法。 (注意:在某些情况下,ID
看起来像xxx或xxx-yyy或xxx-yyy-zzz,即它可能由三部分组成。(这解释了我的代码中的条件))
public static List<BookObject> getBookEntries(
List<String> books) {
String bookTitle = " ";
String bookID = " ";
String bookElementID = " ";
String recordID = " ";
String bookNo = " ";
for String book : books) {
String[] parts = book.split("-");
if (parts.length == 5) {
for (int i = 0; i < parts.length; i++) {
bookTitle = parts[0]
bookNo = parts[1]
bookID = parts[2];
bookElementID = parts[3];
recordID = parts[4];
bookObj = new BookObject();
bookObj.setBookTitle(bookTitle);
bookObj.setBookNo(bookNo);
bookObj.setBookId(bookID);
bookObj.setBookElementId(bookElementID);
bookObj.setRecordId(recordID);
}
} else if (parts.length == 4) {
for (int i = 0; i < parts.length; i++) {
bookTitle = parts[0]
bookNo = parts[1]
bookID = parts[2];
bookElementID = parts[3];
bookObj = new BookObject();
bookObj.setBookTitle(bookTitle);
bookObj.setBookNo(bookNo);
bookObj.setBookId(bookID);
bookObj.setBookElementId(bookElementID);
bookObj.setRecordId(recordID);
}
} else if (ids.length == 1) {
for (int i = 0; i < parts.length; i++) {
bookTitle = parts[0]
bookNo = parts[1]
bookID = parts[2];
bookObj = new BookObject();
bookObj.setBookTitle(bookTitle);
bookObj.setBookNo(bookNo);
bookObj.setBookId(bookID);
bookObj.setBookElementId(bookElementID);
bookObj.setRecordId(recordID);
}
}
bookEntries.add(bookObj);
}
return bookEntries;
}
稍后我只是迭代每个bookEntries
并添加到Excel工作表。 (我希望这有点清楚。)
for (int i = 0; i < listEntries.size(); i++) {
Row dataRow = sheet.createRow(i+1);
dataRow.createCell(0).setCellValue(
bookEntries.get(i).getBookTitle());
dataRow.createCell(1).setCellValue(
bookEntries.get(i).getBookId());
dataRow.createCell(2).setCellValue(
bookEntries.get(i).getBookElementId());
dataRow.createCell(3).setCellValue(
bookEntries.get(i).getRecordId());
dataRow.createCell(4).setCellValue(
bookEntries.get(i).getBookNo());
}
答案 0 :(得分:2)
我找到了答案。缺少条目的原因是来自XML的数据格式。有些条目(10)的标题中有连字符。我错误地没有考虑过这一点,因为大多数条目的名字都没有连字符。因此,这导致将这些字符串分成6个部分,我的代码没有处理。我原以为它最多被分成5个部分。我现在已经解决了这个问题,并且工作正常:)