解析器解析一个未知的方案 XML 在 java

我试图了解所有其他答案 stackoverflow. 但我无法通过我的问题连接这些答案。

当我打电话给Web服务时,我得到了
response

. 我得到了一个计划
response.getData//;/The XML of the data table containing the results./


/return type String/

. 我们不知道我们进入了什么数据 XML.

我需要使用第三方解析器,当我将上面的字符串授予这个解析器中的一个方法时,它必须返回此中的所有项目 XML, 然后我可以打印必要的物品。

我不想开始分析 XML 他自己。 有没有办法做到这一点? /这个有意义吗?/. 对不起,如果我完全错了。 /使用
Axis2/eclipse

/ /编辑/

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


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="">&gt; parseXml/String xml/ throws XMLStreamException {
StringBuilder content = null;
Map<string, list<string="">&gt; dataMap = new HashMap&lt;&gt;//;
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&lt;&gt;//;
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;
}


</string></string,></string,>

诸葛浮云

赞同来自:

您必须阅读与之关联的答案
https://coderoad.ru/373833/
. 使用示例 XML 的
https://msdn.microsoft.com/en- ... .aspx
, 我下载到磁盘上的临时文件夹 C:, 您可以使用您的本机库 Java SAXParser. 这是一个类的一个例子,你可以用来枚举所有元素 XML. 在项目中创建一个类并将其称为语法分析方法:


File xml = new File/"c:/temp/books.xml"/;
MySaxParser sax = new MySaxParser/xml/;
sax.parseXml//;


这是您可以将其复制到项目以尝试的类。 当然,根据您的需求修改。 导入必须将您发送到相关页面。 Java API, 如
http://docs.oracle.com/javase/ ... .html
开始。


import java.io.File;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class MySaxParser extends DefaultHandler {
private String absolutePathToXml = "";
public MySaxParser/File xml/ {
absolutePathToXml = xml.getAbsolutePath//;
}
/**
* Parses an XML file into memory
*/
public void parseXml// {
SAXParserFactory factory = SAXParserFactory.newInstance//;
try {
SAXParser parser = factory.newSAXParser//;
parser.parse/absolutePathToXml, this/;
} catch /ParserConfigurationException e/ {
System.out.println/"ParserConfigurationException: "/;
e.printStackTrace//;
} catch /SAXException e/ {
System.out.println/"SAXException: "/;
e.printStackTrace//;
} catch /IOException e/ {
System.out.println/"IOException: "/;
e.printStackTrace//;
}
}
/**
* Event: Parser starts reading an element
*/
@Override
public void startElement/String s1, String s2, String elementName, Attributes attributes/
throws SAXException {
//print an element's name
System.out.println/"element: " + elementName/;
//print all attributes for this element
for/int i = 0; i < attributes.getLength//; i++/ {
System.out.println/"attribute: " + attributes.getValue/i//;
}
}
}

要回复问题请先登录注册