解析特定的 XML [重复]

Posted

技术标签:

【中文标题】解析特定的 XML [重复]【英文标题】:Parse a specific XML [duplicate] 【发布时间】: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 的值,但现在出现错误。我已经更新了我的问题 我收到一个新错误:文件过早结束 【参考方案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 查看更新

以上是关于解析特定的 XML [重复]的主要内容,如果未能解决你的问题,请参考以下文章

ElementTree:解析 XML 曾孙 [重复]

解析和处理 HTML/XML/纯文本页面 [重复]

特定的 Java HTML 解析器 [重复]

解析 XML,获取特定名称的深层元素。 (C#)

如何通过 JAXB xml 解析获取特定元素?

解析特定的 JSON 结构 [重复]