【问题标题】:Parse a specific XML [duplicate]解析特定的 XML [重复]
【发布时间】:2017-12-29 22:41:07
【问题描述】:

我想用 Java 解析 XML。 XML 看起来像:

<Attributes><ProductAttribute ID="359"><ProductAttributeValue><Value>1150</Value></ProductAttributeValue></ProductAttribute><ProductAttribute ID="361"><ProductAttributeValue><Value>1155</Value></ProductAttributeValue></ProductAttribute></Attributes>

我的尝试是:

 public static void parseXml(String sb) throws Exception{


    sb = "<Attributes><ProductAttribute ID="359"><ProductAttributeValue><Value>1150</Value></ProductAttributeValue></ProductAttribute><ProductAttribute ID="361"><ProductAttributeValue><Value>1155</Value></ProductAttributeValue></ProductAttribute></Attributes>";

     Document dom;
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();

    dom = db.parse(new InputSource(new ByteArrayInputStream(sb.getBytes("utf-8"))));

    dom.toString();
}

我想先看看解析是否进行。但事实并非如此。

我得到错误:

 Premature end of file

有人知道,我该如何解析这些?

问题不重复。我已经阅读了另一个问题的答案,例如我的问题,但区别在于 XML。

谢谢

【问题讨论】:

  • 好吧,您正在尝试解析不是 XML 的字符串。您需要从 JSON 中获取 AttributesXml 属性的 value,然后解析 that。目前尚不清楚所有这些来自何处或您的其余代码是什么样的,但您应该关注的第一件事是获取有效的 XML。
  • 首先,得到一个正确的XML,然后对其进行规范化,然后使用getElementsByTagName方法获取值。
  • 感谢您的 cmets。我已更改它并获取 AttributesXml 的值,但现在出现错误。我已经更新了我的问题
  • 我收到一个新错误:文件过早结束

标签: java json xml


【解决方案1】:

先解析JSON字符串得到XML,再解析xml。例如,使用JSON-java:

        JSONObject obj = new JSONObject(json);
        JSONArray arr = obj.getJSONArray("value");
        for (Object elm: arr) {
            String xml = ((JSONObject)elm).getString("AttributesXml");
            DocumentBuilderFactory documentBuilderFactory
                    = DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder
                    = documentBuilderFactory.newDocumentBuilder();
            Document document = documentBuilder.parse(
                    new InputSource(new StringReader(xml)));
            doSomethingWith(document);
        }

但是使用 String 参数的方法 parse 需要一个 URI 作为参数,而不是 XML 源,所以你必须使用另一个。

更新:

我看到您已经更新了您的问题,并且 xml 在 sb 中;这将是:

            DocumentBuilderFactory documentBuilderFactory
                    = DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder
                    = documentBuilderFactory.newDocumentBuilder();
            Document document = documentBuilder.parse(
                    new InputSource(new StringReader(sb)));
            doSomethingWith(document);

【讨论】:

  • 我已经测试过了,就像你描述的那样。它没有去
  • @mg.mg.92 查看更新
猜你喜欢
  • 1970-01-01
  • 2021-02-28
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 2014-02-05
  • 2011-12-17
  • 1970-01-01
相关资源
最近更新 更多