简单的XML解析XML列出
问题描述:
我用简单的XML(简单的XML-2.6.2.jar)来分析,如XML文件:简单的XML解析XML列出
<?xml version="1.0" encoding="UTF-8" ?>
<orderList>
<order id="1">
<name>NAME1</name>
</order>
<order id="2">
<name>NAME2</name>
</order>
</orderList>
根元素包含的子元素。 我想它是ArrayList,怎么做?
答
列表是一个接口,ArrayList的是其实现的一个,如:
List<Order> l = new ArrayList<Order>()
所以,如果你有一个清单,你基本上你想要什么。
答
这里有一个可能的解决方案,希望它可以帮助你:
注释Order
类:
@Root(name="order")
public class Order
{
@Attribute(name="id", required=true)
private int id;
@Element(name="name", required=true)
private String name;
public Order(int id, String name)
{
this.id = id;
this.name = name;
}
public Order() { }
// Getter/Setter
}
Example
类,包含列表:
@Root(name="elementList")
public class Example
{
@ElementList(required=true, inline=true)
private List<Order> list = new ArrayList<>();
// ...
}
而这里有一些用于阅读的代码荷兰国际集团代码:
Serializer ser = new Persister();
Example example = ser.read(Example.class, file); // file = your xml file
// 'list' now contains all your Orders
答
如果我正确地解释你的问题,你想命令的列表。我没有测试此为您的设置,但是这对我的作品进行了类似的XML结构(假设你有一个自定义类名为Order):
List<Order> orders = new ArrayList<Order>();
XMLDOMParser parser = new XMLDOMParser();
AssetManager manager = context.getAssets();
InputStream stream;
try {
stream = manager.open("test.xml"); //need full path to your file here - mine is stored in assets folder
Document doc = parser.getDocument(stream);
}catch(IOException ex){
System.out.printf("Error reading xml file %s\n", ex.getMessage());
}
NodeList nodeList = doc.getElementsByTagName("order");
for (int i = 0; i < nodeList.getLength(); i++) {
Element e = (Element) nodeList.item(i); //each order item
Node order=nodeList.item(i);
subList = order.getFirstChild(); //get the name child node
orders.add(order);
}
//XMLDOMParser Class
public class XMLDOMParser {
//Returns the entire XML document
public Document getDocument(InputStream inputStream) {
Document document = null;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = factory.newDocumentBuilder();
InputSource inputSource = new InputSource(inputStream);
document = db.parse(inputSource);
} catch (ParserConfigurationException e) {
Log.e("Error: ", e.getMessage());
return null;
} catch (SAXException e) {
Log.e("Error: ", e.getMessage());
return null;
} catch (IOException e) {
Log.e("Error: ", e.getMessage());
return null;
}
return document;
}
/*
* I take a XML element and the tag name, look for the tag and get
* the text content i.e for <employee><name>Kumar</name></employee>
* XML snippet if the Element points to employee node and tagName
* is name I will return Kumar. Calls the private method
* getTextNodeValue(node) which returns the text value, say in our
* example Kumar. */
public String getValue(Element item, String name) {
NodeList nodes = item.getElementsByTagName(name);
return this.getTextNodeValue(nodes.item(0));
}
private final String getTextNodeValue(Node node) {
Node child;
if (node != null) {
if (node.hasChildNodes()) {
child = node.getFirstChild();
while(child != null) {
if (child.getNodeType() == Node.TEXT_NODE) {
return child.getNodeValue();
}
child = child.getNextSibling();
}
}
}
return "";
}
}
对不起,这不是匹配的意思。我想要的结果是列表或ArrayList ,而不是Orderlist.class。 –
YETI
因为你的根对象是OrderList,所以你不能。 – Tomer