解析特定的 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章