Java 将XML转换为CSV的代码具有NullPointerException

Java 将XML转换为CSV的代码具有NullPointerException,java,xml,csv,Java,Xml,Csv,我现在遇到的问题与这里回答的问题几乎完全相同。我承认,我对Java的了解还不够,我自己也无法编写出如此复杂的程序。我可以用其他几种语言编写这么长的脚本,但Java对我来说毫无意义。然而,我通常可以很好地适应其他程序。不过,我一直坚持这一点,因为当我尝试从接受的答案(没有任何修改)运行代码时,我得到以下结果 >java App Exception in thread "main" java.lang.NullPointerException at App$HeaderHand

我现在遇到的问题与这里回答的问题几乎完全相同。我承认,我对Java的了解还不够,我自己也无法编写出如此复杂的程序。我可以用其他几种语言编写这么长的脚本,但Java对我来说毫无意义。然而,我通常可以很好地适应其他程序。不过,我一直坚持这一点,因为当我尝试从接受的答案(没有任何修改)运行代码时,我得到以下结果

>java App
Exception in thread "main" java.lang.NullPointerException
        at App$HeaderHandler.addItemHeader(App.java:76)
        at App$HeaderHandler.endElement(App.java:99)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2939)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:647)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
        at App.main(App.java:23)
现在,我知道这意味着在第76行至少有一个变量没有初始化,它有一个空值,而它不应该。我试图通过放置
stringheadername=newstring(“默认”)来初始化它就在它之前,这甚至阻止了它编译:

App.java:76: headerName is already defined in addItemHeader(java.lang.String)
                        String headerName = new String("default");
我不知道从那里去哪里。这是第75-81行的代码

        private void addItemHeader(String headerName) {
            if (itemHeader.containsKey(headerName)) {
                itemHeader.put(headerName, itemHeader.get(headerName) + 1);
            } else {
                itemHeader.put(headerName, 1);
            }
        }
如果我能得到这段代码,或者任何类似的代码,如果有人想建议另一种方法,我相信我可以做一些小的改变,并调整代码

如果没有人知道如何修复NullPointerException,我也会接受任何其他采用类似以下XML的Java解决方案

<?xml version="1.0" encoding="ISO-10646-UCS-2" standalone="yes" ?>
<ROOT DATE_CREATED="1970-01-01 00:00:01" CREATED_BY="Log Parser">
 <ROW>
  <EventLog>
  Exception
  </EventLog>
  <RecordNumber>
  1381938446
  </RecordNumber>
  <Message>
  An Error Occurred
  </Message>
  <Data>
  </Data>
 </ROW>
 </ROOT>

我想问题可能就在这里

   public void startElement(String uri, String name,
            String qName, Attributes atts) {
        if ("item".equalsIgnoreCase(qName)) {
            itemHeader = new LinkedHashMap<String, Integer>();
        }
public void startElement(字符串uri、字符串名称、,
字符串(名称、属性和附件){
如果(“项”。相等信号案例(qName)){
itemHeader=新建LinkedHashMap();
}

itemHeader只有在找到开始标记时才会初始化。因此,除非Xml以开头,否则将出现当前错误

试着改变

private LinkedHashMap<String, Integer> itemHeader;
私有LinkedHashMap项目头;

private LinkedHashMap itemHeader=new LinkedHashMap();

但是您需要仔细查看代码,还会有其他与特定Xml相关的更改。

我认为问题可能就在这里

   public void startElement(String uri, String name,
            String qName, Attributes atts) {
        if ("item".equalsIgnoreCase(qName)) {
            itemHeader = new LinkedHashMap<String, Integer>();
        }
public void startElement(字符串uri、字符串名称、,
字符串(名称、属性和附件){
如果(“项”。相等信号案例(qName)){
itemHeader=新建LinkedHashMap();
}

itemHeader只有在找到开始标记时才会初始化。因此,除非Xml以开头,否则将出现当前错误

试着改变

private LinkedHashMap<String, Integer> itemHeader;
私有LinkedHashMap项目头;

private LinkedHashMap itemHeader=new LinkedHashMap();

但是您需要仔细查看代码,会有其他与特定Xml相关的更改。

“因此,除非您的Xml以[?]开头,否则…”从我开始?从什么开始?!:这确实修复了空指针,这要归功于你。我发现了其他错误,但我已经自己修复了这些错误。如果修复了,我会尝试用最终代码更新它。谢谢!“所以除非你的Xml以[?]你开始…”从我开始?从什么开始?!:这确实修复了空指针,这要归功于你。我发现了其他错误,但我已经自己修复了。如果/当我修复它时,我会尝试用最终代码更新它。谢谢!