我需要在.xml文件中搜索元素。它具有以下结构:
<elements number="3">
<contact>
<name>PAUL</name>
<code>A1</code>
</contact>
<contact>
<name>LAURA</name>
<code>A2</code>
</contact>
<contact>
<name>JOHN</name>
<code>A3</code>
</contact>
我的解决办法是:
public static String readContactsList(String nameContact) {
XMLInputFactory xmlif = null;
XMLStreamReader xmlr = null;
String contacts = "contacts.xml";
try {
xmlif = XMLInputFactory.newInstance();
xmlr = xmlif.createXMLStreamReader(contacts, new FileInputStream(contacts));
while (xmlr.hasNext()) {
switch (xmlr.getEventType()) {
case XMLStreamConstants.START_DOCUMENT:
System.out.println("Start Read Doc " + contacts);
break;
case XMLStreamConstants.START_ELEMENT:
System.out.println("Tag " + xmlr.getLocalName());
for (int i = 0; i < xmlr.getAttributeCount(); i++)
System.out.printf(" => attribut %s->%s%n", xmlr1.getAttributeLocalName(i), xmlr.getAttributeValue(i));
break;
case XMLStreamConstants.END_ELEMENT:
System.out.println("END-Tag " + xmlr.getLocalName());
break;
case XMLStreamConstants.COMMENT:
System.out.println("// comment " + xmlr.getText());
break;
case XMLStreamConstants.CHARACTERS:
if (xmlr.getText().trim().length() > 0)
if (!xmlr.getText().equals(nameContact)) {
xmlr.next();
}
else
System.out.println("-> " + xmlr.getText());
break;
}
xmlr.next();
}
}
catch (Exception e) {
System.out.println("reader initialization error");
System.out.println(e.getMessage());
}
return contacts;
}
此方法收到一个联系人的姓名(即“ LAURA”),并且应返回其代码。我想念的是如何滚动.xml文件以及如何访问不同标签的内容。
谢谢!
答案 0 :(得分:1)
以下代码(基于您的代码)应该可以工作,但是请注意,如果您切换标签<name>
和<code>
的顺序,则会失败。
此外,请注意您没有关闭流。只需放置一个finally {xmlr.close();}
即可关闭流。
public static String readContactsList(String nameContact) {
boolean match = false;
XMLInputFactory xmlif = null;
XMLStreamReader xmlr = null;
String contacts = "contacts.xml";
try {
xmlif = XMLInputFactory.newInstance();
xmlr = xmlif.createXMLStreamReader(contacts, new FileInputStream(contacts));
while (xmlr.hasNext()) {
switch (xmlr.getEventType()) {
case XMLStreamConstants.START_DOCUMENT:
System.out.println("Start Read Doc " + contacts);
break;
case XMLStreamConstants.START_ELEMENT:
System.out.println("Tag " + xmlr.getLocalName());
for (int i = 0; i < xmlr.getAttributeCount(); i++)
System.out.printf(" => attribut %s->%s%n", xmlr.getAttributeLocalName(i), xmlr.getAttributeValue(i));
break;
case XMLStreamConstants.END_ELEMENT:
System.out.println("END-Tag " + xmlr.getLocalName());
break;
case XMLStreamConstants.COMMENT:
System.out.println("// comment " + xmlr.getText());
break;
case XMLStreamConstants.CHARACTERS:
if (xmlr.getText().trim().length() > 0) {
if (!xmlr.getText().equals(nameContact)) {
System.out.println("-> " + xmlr.getText());
if (match) {
return xmlr.getText();
}
}
else {
System.out.println("-> " + xmlr.getText());
//This is just in case the name and the code be the same
if (match) {
return xmlr.getText();
}
match = true;
}
}
break;
}
xmlr.next();
}
}
catch (Exception e) {
System.out.println("reader initialization error");
System.out.println(e.getMessage());
}
return contacts;
}