0

2 つの xml ファイルを解析しています - 最初のファイルは XmlParser を使用して正常に解析しました:-

public final String getElementValue(Node elem) {
    Node child;
    if (elem != null) {
        if (elem.hasChildNodes()) {
            for (child = elem.getFirstChild(); child != null; child = child
                    .getNextSibling()) {
                if (child.getNodeType() == Node.TEXT_NODE) {
                    System.out.println("±VALUE: "
                            + child.getNodeValue().toString()
                            + " node type: " + child.getNodeType());
                    return child.getNodeValue();
                }

ただし、次の xml ファイルには、必要な属性が含まれています。同じパーサーを使用できますか? その場合、属性を読み取るように変更するにはどうすればよいですか? 読みたいファイルはhttp://cloud.tfl.gov.uk/TrackerNet/LineStatusです。回線名とステータスの説明が必要です。

KEY を含む別のクラスを使用しています - 必要な属性を明示的に指定するにはどうすればよいですか? すなわち以下:-

static final String KEY_TRANSPORT = "LineStatus"; // parent node
static final String KEY_LINENAME = "???";
static final String KEY_LINEDESC = "???";

ありがとう!

4

1 に答える 1

1

XML に関する問題は、情報を取得するためにファイル全体を読み取り/解析する必要があることです。必要なビットだけを読み取ることはできません。ファイルを一度読み取り、必要なすべての情報を別のクラス内に保存して、後で取得できるようにする必要があります。

以下は、アーカイブから XML を解析する方法を学んだ方法ですが、SAXParser を使用しました。XMLドキュメントでタグを読み取っている場所を追跡するには、startElementとendElementでブール値をtrueまたはfalseに設定する必要があります。次に、文字をオーバーライドしてそこで文字列を復元し、どのブール値がtrueであるかに応じてホルダークラス内に格納します。覚えておいてくださいそのブール値は、ドキュメント内のどこにいるかを示します。

複雑なドキュメントがあり、取得したい情報が多い場合、ハンドラーは多くのサブレベルを持つことができ、混乱してエラーを起こしやすいため、再確認する必要があります。

SAXパーサー:

http://www.anddev.org/parsing_xml_from_the_net_-_using_the_saxparser-t353.html http://www.androidpeople.com/android-xml-parsing-tutorial-using-saxparser


または、XMLPullParser を使用して、ループを使用してタグ内に入り、探しているタグ内に情報を格納することもできます。ただし、この方法を使用したことがないため、最初の方法と比較して効率を比較することはできません。いずれにせよ、探しているタグに到達するまで、タグをナビゲートする必要があります。ここにあります:

XmlPullParser tutorials;
tutorials = XmlPullParserFactory.newInstance().newPullParser();
tutorials.setInput(downloadPath.openStream(), null);

while (eventType != XmlPullParser.END_DOCUMENT) {
    if (eventType == XmlPullParser.START_TAG) {
        String tagName = tutorials.getName();
        if (tagName.equals("item")) {
            // inner loop looking for link and title
            while (eventType != XmlPullParser.END_DOCUMENT) {
                if (eventType == XmlPullParser.START_TAG) {
                    if (tutorials.getName().equals("link")) {
                    } else if (tutorials.getName().equals(
                            "title")) {
                    }
                } else if (eventType == XmlPullParser.END_TAG) {
                    if (tutorials.getName().equals("item")) {
                        // save the data, and then continue with
                        // the outer loop
                        break;
                    }
                }
                eventType = tutorials.next();
            }
        }
    }
    eventType = tutorials.next();
}
于 2012-11-03T18:33:45.803 に答える