gpt4 book ai didi

java - 使用java解析xml中的元素数组

转载 作者:行者123 更新时间:2023-12-02 05:02:53 26 4
gpt4 key购买 nike

这里,我使用 SAX 方法来解析数组。我面临一个问题,我无法编写通用代码来解析 xml 数组类型。我找不到通用方法的解决方案来将其识别为数组并迭代它并将其存储在列表中

<bookstore>
<book category="children">
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="web">
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>

任何解决方案都会有帮助。提前致谢

最佳答案

我使用下面的代码。我从: https://github.com/niteshapte/generic-xml-parser 得到它

public class GenericXMLParserSAX extends DefaultHandler {

private ListMultimap<String, String> listMultimap = ArrayListMultimap.create();
String tempCharacter;
private String[] startElements;
private String[] endElements;

public void setStartElements(String[] startElements) {
this.startElements = startElements;
}

public String[] getStartElements() {
return startElements;
}

public void setEndElements(String[] endElements) {
this.endElements = endElements;
}

public String[] getEndElements() {
return endElements;
}

public void parseDocument(String xml, String[] startElements, String[] endElements) {
setStartElements(startElements);
setEndElements(endElements);

SAXParserFactory spf = SAXParserFactory.newInstance();
try {
SAXParser sp = spf.newSAXParser();
InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
sp.parse(inputStream, this);
} catch(SAXException se) {
se.printStackTrace();
} catch(ParserConfigurationException pce) {
pce.printStackTrace();
} catch (IOException ie) {
ie.printStackTrace();
}
}

public void parseDocument(String xml, String[] endElements) {
setEndElements(endElements);

SAXParserFactory spf = SAXParserFactory.newInstance();
try {
SAXParser sp = spf.newSAXParser();
InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
sp.parse(inputStream, this);
} catch(SAXException se) {
se.printStackTrace();
} catch(ParserConfigurationException pce) {
pce.printStackTrace();
} catch (IOException ie) {
ie.printStackTrace();
}
}

@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
String[] startElements = getStartElements();

if(startElements!= null){
for(int i = 0; i < startElements.length; i++) {
if(qName.startsWith(startElements[i])) {
listMultimap.put(startElements[i], qName);
}
}
}
}

@Override
public void characters(char[] ch, int start, int length) throws SAXException {
tempCharacter = new String(ch, start, length);
}

@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
String[] endElements = getEndElements();

for(int i = 0; i < endElements.length; i++) {
if (qName.equalsIgnoreCase(endElements[i])) {
listMultimap.put(endElements[i], tempCharacter);
}
}
}

public ListMultimap<String, String> multiSetResult() {
return listMultimap;
}
}

关于java - 使用java解析xml中的元素数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56376532/

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