Я беру 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)
Что мне нужно сделать, это сохранить эти значения в 5 различных столбцов в листе Excel (разделив ID вокруг переносы, где каждая часть идентификатора разные суб-идентификаторы).
Итак, я итерацию по файлу, получите название, номер и ID, и объединить их вместе с «-» между таким образом, что она выглядит как строка формата
Титульный Номер-SubID1 -SubID2-SubID3
и я добавляю каждую из этих строк в список, который я потом перебираю, разделяю с «-» и получаю каждое из 5 значений и записываю на лист Excel.
В моем файле 113 уникальных вхождений, но я просто замечаю, что в моем листе Excel я получаю только 103 уникальных вхождения и 10 значений являются дубликатами. И как-то, 10 значений, которые должны быть там, отсутствуют в листе. Я действительно смущен тем, что происходит.
EDIT:
Это где я получаю строку для каждого идентификатора шлю в вместе с документом 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
выглядит ххх или ххх-ууу или ххх-ууу-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());
}
Нам нужно посмотреть, как вы читаете xml и пишите в excel. Покажите нам только релевантные детали. –
+1 @SotiriosDelimanolis - как мы можем знать, что вы делаете неправильно, если мы не можем видеть, как вы это делаете? –
@SotiriosDelimanolis, пожалуйста, проверьте изменения. – DT7