XMLResourceParser,我不知道如何阅读我拥有的XML

mat*_*cka 5 java xml android

这是我的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>
Run Code Online (Sandbox Code Playgroud)

我正在使用这样的代码来尝试检索它:

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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

它没有得到数据,我不知道从哪里开始.

use*_*_CC 5

您不需要使用 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();
    }
}
Run Code Online (Sandbox Code Playgroud)