为什么有些条目被replace?

我将一个XML文件作为input(文件中的数据就像书籍的索引页面,带有章节名称和一些其他信息),然后使用我的代码从中检索几个值。 我从文件中得到的三个值是:

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,并将它们连接在一起,在“ – ”之间,使它看起来像一个格式的string

标题用户号码SubID1-SubID2-SubID3

我将这些string中的每一个添加到一个列表中,我将在后面进行迭代,从“ – ”中分割出5个值并写入Excel工作表。

我的文件有113个独特的事件,但我只注意到,在我的Excel表中,我只得到103个唯一的事件,10个值是重复的。 不知何故,应该在那里的10个值不在表格中。 我真的很困惑发生了什么事情。

编辑:

这是我得到每个我与XML文档一起发送的IDstring。

  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; } 

我添加每个返回到列表的string。

 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()); } 

我find了答案。 这些缺失条目的原因是来自XML的数据格式。 有些作品(10)的标题中有连字符。 我错误地没有考虑到这一点,因为大多数条目没有任何连字号。 所以,这导致将这些string分成6个部分,我的代码没有处理。 我以为它最多可以分成5个部分。 我已经修复,现在,它工作正常:)