【问题标题】:sax parsing: take value from div tagsax 解析:从 div 标签中获取值
【发布时间】:2012-05-09 21:59:36
【问题描述】:

我正在做一个 Android 应用程序。在我的应用程序中,我必须解析一个 xml 页面。xml 页面中的数据格式如下。

<root>
<tag1>data</tag1>

<tag2> 
<div>data1</div><div>data2</div>
</tag2>
</root>

尝试通过 sax 解析获取数据。

 if (localName.equalsIgnoreCase("tag1"))
if (localName.equalsIgnoreCase("tag2"))

但我没有从 tag2 获取任何数据,而是从 tag1 获取值。我想获取所有数据,包括 div 标签,然后只有我可以在 html 页面中显示数据。

【问题讨论】:

  • 你还必须使用 if (localName.equalsIgnoreCase("div"))
  • 我也想要那个 div 标签....那么只有我可以显示 html 格式的内容

标签: android xml-parsing sax


【解决方案1】:

使用此示例代码

public class SAXParserDemo extends DefaultHandler {

    private String currentTag = "";
    private StringBuffer responseTag;
    private String str;

    @Override
    public void startDocument() throws SAXException {
        super.startDocument();

    }

    @Override
    public void endDocument() throws SAXException {
        super.endDocument();
    }

    @Override
    public void startElement(String uri, String localName, String name,
            Attributes attributes) throws SAXException {
        super.startElement(uri, localName, name, attributes);

        currentTag = localName;
        if ("tag1".equalsIgnoreCase(localName)) {
            responseTag = new StringBuffer();
        }else if ("tag2".equalsIgnoreCase(localName)) {
            responseTag = new StringBuffer();
        }else if ("div".equalsIgnoreCase(localName)) {
            responseTag = new StringBuffer();
        }
    }

    @Override
    public void endElement(String uri, String localName, String name)
            throws SAXException {
        super.endElement(uri, localName, name);
        String responseValue = responseTag.toString().trim();

        if ("tag1".equalsIgnoreCase(localName)) {
            Log.v("TAG", "Tag 1 value "+responseValue);
        }else if ("tag2".equalsIgnoreCase(localName)) {
            Log.v("TAG", "Tag 2 value "+responseValue);
        }else if ("div".equalsIgnoreCase(localName)) {
            Log.v("TAG", "div value "+responseValue);
        }
    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        super.characters(ch, start, length);
        str = new String(ch, start, length);

        if ("tag1".equalsIgnoreCase(currentTag)) {
            responseTag.append(str);
        }else if ("tag2".equalsIgnoreCase(currentTag)) {
            responseTag.append(str);
        }else if ("div".equalsIgnoreCase(currentTag)) {
            responseTag.append(str);
        }
    }
}

【讨论】:

  • 可以在logcat中看到div的值。如果您仍然有问题,请分享您的代码。
【解决方案2】:

如果您使用 SAX 解析,则需要查找 div 元素,并且需要跟踪父元素(您自己)并确保它是 tag2。您在 tag1 元素中获取数据(字符),因为它直接包含这些字符。 tag2 元素不包含任何(非空白)字符,仅包含其他元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 2015-09-29
    • 1970-01-01
    • 2011-02-19
    • 2012-11-10
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    相关资源
    最近更新 更多