gpt4 book ai didi

java - 解析器在java中解析未知的XML Schema

转载 作者:行者123 更新时间:2023-12-01 11:59:26 26 4
gpt4 key购买 nike

我尝试理解 stackoverflow 中的所有其他答案。但我无法将这些答案与我的问题联系起来。

当我调用网络服务时,我得到 response 。我通过 response.getData();(The XML of the data table containing the results.) 获取架构(return type String) 。我们不知道在该 XML 中获得了什么数据。

我需要使用第三方解析器,这样当我将上述字符串提供给该解析器中的一个方法时,它应该返回该 XML 中的所有元素,然后我可以打印所需的元素。

我不想自己开始解析 XML。我有办法做到这一点吗? (这有什么意义吗?)。抱歉,如果我完全错了。 (使用Axis2/eclipse)(已编辑)

编辑:添加我已经尝试过的代码。

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
NodeList nodeList = null;


try {
String xml = res2.getResult().getRawData();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(new ByteArrayInputStream(xml.getBytes()));
nodeList = document.getElementsByTagName("PhoneNumber");
NamedNodeMap attrib = document.getAttributes();
for (int i = 0; i < attrib.getLength(); i++) {
String nodeName = attrib.item(i).getNodeName();
//nodeName
String nodeValue = attrib.item(i).getNodeValue();
}

但我不确定 PhoneNumber 是否带有该标签或其他名称。我们也不知道我们有多少标签。

谢谢,使用 SyamS 的代码,我可以从 xml 打印所有节点和相应的值。现在我想将其存储到 HashMap 中,其中键作为节点名称,节点值在列表中。

示例 XML:

<Docs>
<Doc>
<Id>12</Id>
<Phone>1234</Phone>
</Doc>
<Doc>
<Id>147</Id>
<Phone>12345</Phone>
<Locked>false</Locked>
<BID>2</BID>
<DocId>8</DocId>
<Date>2014-02-04T12:18:50.063-07:00</Date>
<Urgent>false</Urgent>
</Doc>
</Docs>

最佳答案

您无需为此寻求第三方库。您可以简单地使用 xpath 识别所有叶节点并读取值(以及属性)。例如

public static Map<String, List<String>> parseXml(String xml) throws XMLStreamException {
StringBuilder content = null;
Map<String, List<String>> dataMap = new HashMap<>();
XMLInputFactory factory = XMLInputFactory.newInstance();
InputStream stream = new ByteArrayInputStream(xml.getBytes());
XMLStreamReader reader = factory.createXMLStreamReader(stream);

while (reader.hasNext()) {
int event = reader.next();

switch (event) {
case XMLStreamConstants.START_ELEMENT:
content = new StringBuilder();
break;

case XMLStreamConstants.CHARACTERS:
if (content != null) {
content.append(reader.getText().trim());
}
break;

case XMLStreamConstants.END_ELEMENT:
if (content != null) {
String leafText = content.toString();
if(dataMap.get(reader.getLocalName()) == null){
List<String> values = new ArrayList<>();
values.add(leafText);
dataMap.put(reader.getLocalName(), values);
} else {
dataMap.get(reader.getLocalName()).add(leafText);
}
}
content = null;
break;

case XMLStreamConstants.START_DOCUMENT:
break;
}

}

return dataMap;
}

关于java - 解析器在java中解析未知的XML Schema,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28093837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com