使用Java中的SAX Parser的任何类型的FLAT XML

时间:2016-10-21 13:08:28

标签: java xml

我是Java的新手,我编写了一个代码,我正在努力获取标记内的元素值。例如,在下面的xml-id = bk001没有出现在输出

   <book id="bk001">
  <author>Hightower, Kim</author>
  <title>The First Book</title>
  <genre>Fiction</genre>
  <price>44.95</price>
  <pub_date>2000-10-01</pub_date>
  <date>
  <auth_date>
  2000-10-01
  </auth_date>
  <auth_date>
  2000-10-05
  </auth_date>
  </date>
  <review>An amazing story of nothing.</review>
  </book>

我们可以期待任何类型的XML,我们必须转换为扁平结构,例如CSV

编写的代码

 public class SAX 
 {
Map<String, String> list = new HashMap<String,String>();
public static void main(String[] args) throws IOException {
    new SAX().printElementNames("input/books_1.xml");
}

public void printElementNames(String fileName) throws IOException 
{
    try {
        SAXParserFactory parserFact = SAXParserFactory.newInstance();
        SAXParser parser = parserFact.newSAXParser();
        DefaultHandler handler = new DefaultHandler() 
        {
            public void startElement(String uri, String lName, String ele,  Attributes attributes) throws SAXException {

                System.out.print(ele + " ");

                if((attributes.getValue("TagValue"))==null)
               {
                  return;
               }
               else
               {

                System.out.println(attributes.getValue("TagValue"));
               }
            }

            public void characters(char ch[], int start, int length) throws SAXException {
                String value = new String(ch, start, length).trim();
                if(value.length() == 0) return;
                System.out.println(value);
            }               
        };

        parser.parse(new File(fileName), handler);
    }catch(Exception e){
        e.printStackTrace();
    }
}

}

请帮助我。我试图在stackoverflow上搜索相同但无法得到任何具体的东西。 代码的议程是它应该适用于任何有效的XML。 注意 - 我们不允许使用像gson等外部库。

2 个答案:

答案 0 :(得分:0)

您的代码尝试阅读的唯一属性是&#34; TagValue&#34;,那么为什么您希望您的代码显示&#34; id&#34;的值?属性?

答案 1 :(得分:0)

将startElement替换为:

public void startElement(String uri, String localName,String qName, Attributes attributes) throws SAXException {
    System.out.print(qName + " ");

    for(int i=0; i<attributes.getLength();i++) {
        System.out.println(attributes.getQName(i) + " " + attributes.getValue(i));
    }
}