Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么有些条目会被替换?_Java_String_Excel_List_Split - Fatal编程技术网

Java 为什么有些条目会被替换?

Java 为什么有些条目会被替换?,java,string,excel,list,split,Java,String,Excel,List,Split,我将一个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,其中

我将一个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个应该存在的值没有出现在表中。我真的对发生的事情感到困惑

编辑:

在这里,我将获得与XML文档一起发送的每个ID的字符串

 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;
}
稍后,我只需迭代每个
账簿条目
,并将其添加到Excel工作表中。(我希望这能让你明白一点。)

for(int i=0;i
我找到了答案。缺少这些条目的原因是XML中的数据格式。有些条目(10)的标题中有连字符。我没有错误地考虑这一点,因为大多数条目的名称中没有任何连字符。因此,这导致将这些字符串拆分为6个部分,而我的代码没有处理这些部分。我假设它最多可以分成5个部分。我现在已经解决了这个问题,效果很好:)

我们需要看看您是如何读取xml和写入excel的。只向我们展示相关部分。+1@SotiriosDelimanolis-如果我们看不到你是如何做的,我们怎么知道你做错了什么?@SotiriosDelimanolis请检查编辑。@TimWilliams我试图解释最透彻的问题,因为代码太多了。我编辑了这个问题,并添加了我的部分代码,希望现在它会变得清晰。
List<String> books = new ArrayList<String>();

books.add(getBooksFromDoc(xmlDoc, id);
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;
}
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());
}