以下是我的XML文件示例:
<?xml version="1.0" encoding="utf-8"?>
<assurances>
<assurance hasReference="true">
<message>You're Awesome!</message>
<reference>Genesis 1:26</reference>
</assurance>
<assurance hasReference="true">
<message>Your Wonderfull!</message>
<reference>Genesis 1:26</reference>
</assurance>
</assurances>
我正在使用这样的代码来尝试检索它:
int eventType = -1;
while(eventType != XmlResourceParser.END_DOCUMENT)
{
XmlResourceParser assurances = getResources().getXml(R.xml.assurances);
String name = assurances.getText();
Log.d(TAG, name);
try {
if (assurances.getEventType() == XmlResourceParser.START_TAG) {
String s = assurances.getName();
if (s.equals("assurance")) {
String strMessage = assurances.getAttributeValue(null, "message");
String strReference = assurances.getAttributeValue(null, "reference");
Log.d(TAG, strMessage);
Log.d(TAG, strReference);
}
}
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
它没有得到数据,我不知道从哪里开始。
答案 0 :(得分:4)
您不需要使用getAttributeValue方法,而是需要使用getText()方法。我已对您的代码进行了一些更改,因此如果您使用下面的代码,那么它将正常工作:
int eventType = -1;
while(eventType != XmlResourceParser.END_DOCUMENT)
{
XmlResourceParser assurances = getResources().getXml(R.xml.assurances);
String name = assurances.getText();
Log.d(TAG, name);
try {
if (assurances.getEventType() == XmlResourceParser.START_TAG) {
String s = assurances.getName();
if (s.equals("assurance")) {
assurances.next(); /// moving to the next node
if(assurances.getName() != null && assurances.getName().equalsIgnoreCase("message")){
String strMessage = assurances.getText(); ///to get value getText() method should be used
assurances.next(); ///jumping on to the next node
String strReference = assurances.getText(); ////similar to above
}
Log.d(TAG, strMessage);
Log.d(TAG, strReference);
}
}
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 1 :(得分:1)
希望这会对你有所帮助。 问候 小号
public static void main(String[] args) {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File("c:\\_work\\test.xml"));
//get nodes by name
NodeList nl = doc.getElementsByTagName("assurance");
int nbrOfElements = nl.getLength();
for (int i = 0; i < nbrOfElements; i++) {
Element e = (Element) nl.item(i);
System.out.print(e.getTagName());
System.out.print(":");
System.out.println(e.getTextContent());
}
} catch (Exception ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}