【问题标题】:parse string xml with JDOM使用 JDOM 解析字符串 xml
【发布时间】:2018-04-19 05:26:08
【问题描述】:

我正在尝试使用 JDOM 解析字符串 xml,但是当我打印它时,我打印出空白。不要从我的 xml 字符串中打印任何数据。

    public static void main(String[] args) throws IOException {

    List resultado = null;
    resultado = new ArrayList<>();
    resultado = listarDatos();
    XStream xstream = new XStream();
    String xml = xstream.toXML(resultado);

    String adicionar = "<?xml version = \"1.0\" encoding= \"UTF-8\"?> \n";
    String doctype = "<!DOCTYPE list \n>";
    String xml_m = adicionar + doctype + xml.replace("<newwebservicematerias.Materia>", "<ListaMaterias>").replace("</newwebservicematerias.Materia>", "</ListaMaterias>");
    //System.out.println(xml_m);

    org.jdom.input.SAXBuilder saxBuilder = new SAXBuilder();
    try {
        org.jdom.Document doc = saxBuilder.build(new StringReader(xml_m));
        String message = doc.getRootElement().getText();
        System.out.println(message);
    } catch (JDOMException e) {
// handle JDOMException
    } catch (IOException e) {
// handle IOException
    }

}

并尝试使用 xerces 和 jaxp,但它们会抛出错误。

【问题讨论】:

  • 您是否尝试过使用 System.println() 检查异常子句中发生了什么?我认为生成的 xml 格式不正确...

标签: java string sax jdom parsexml


【解决方案1】:

您代码中的getText() 方法没有达到目的。它返回元素内的文本,但由于没有文本,只有子元素,这就是不打印所需输出的原因。这是修改后的代码:

package com.test;

import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.XMLOutputter;

import com.thoughtworks.xstream.XStream;

public class JdomExample {
    public static void main(String[] args) throws IOException {

        List<String> resultado = listarDatos();
        XStream xstream = new XStream();
        String xml = xstream.toXML(resultado);
        // System.out.println("xml = " + xml);

        String adicionar = "<?xml version = \"1.0\" encoding= \"UTF-8\"?> \n";
        String doctype = "<!DOCTYPE list \n>";
        String xml_m = adicionar + doctype + xml.replace("<newwebservicematerias.Materia>", "<ListaMaterias>")
                .replace("</newwebservicematerias.Materia>", "</ListaMaterias>");
        // System.out.println("xml_m = " + xml_m);

        SAXBuilder saxBuilder = new SAXBuilder();
        try {
            Document doc = saxBuilder.build(new StringReader(xml_m));
            // System.out.println("doc = " + doc);
            Element message = doc.getRootElement();
            print(message);
        } catch (JDOMException e) {
            // handle JDOMException
        } catch (IOException e) {
            // handle IOException
        }

    }

    public static void print(Element element) {
        XMLOutputter outp = new XMLOutputter();
        String s = outp.outputString(element);
        System.out.println(s);
    }

    private static List<String> listarDatos() {
        List<String> list = new ArrayList<>();
        list.add("hello");
        list.add("world");
        return list;
    }
}

输出:

<list>
  <string>hello</string>
  <string>world</string>
</list>

【讨论】:

  • 拜托,你能公开(jdom2 .jar)吗?我有一个(JDOM 2.X),但你的方法没有这个功能。
  • 好的,它正在工作。但我想打印我的结果,没有标签。例如:你好....字符串。
猜你喜欢
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
  • 2014-11-21
相关资源
最近更新 更多