【问题标题】:XmlPullParser: get inner text including XML tagsXmlPullParser:获取包含 XML 标签的内部文本
【发布时间】:2013-04-17 20:15:52
【问题描述】:

假设你有一个这样的 XML 文档:

<root>
  That was a <b boldness="very">very bold</b> move.
</root>

假设XmlPullParser 在root 的开始标签上。有没有一种方便的方法可以将root 中的所有文本读取到String,有点像DOM 中的innerHtml

或者我是否必须自己编写一个实用方法来重新创建已解析的标签?当然,这对我来说似乎是在浪费时间。

String myDesiredString = "That was a <b boldness=\"very\">very bold</b> move."

【问题讨论】:

  • 恐怕你一定会编写自己的函数来解析给定的xml。
  • 噢,伙计。 :( 也许我可以使用 SAX 解析?
  • 但我认为您必须在解析数据时自己重建粗体标签。类似于拉解析器,afaik,SAX 解析器确实处理粗体标记,而不是给你“内部 xml”。

标签: android xml xmlpullparser


【解决方案1】:

这个方法应该覆盖它,但不处理单例标签或命名空间。

public static String getInnerXml(XmlPullParser parser)
        throws XmlPullParserException, IOException {
    StringBuilder sb = new StringBuilder();
    int depth = 1;
    while (depth != 0) {
        switch (parser.next()) {
        case XmlPullParser.END_TAG:
            depth--;
            if (depth > 0) {
                sb.append("</" + parser.getName() + ">");
            }
            break;
        case XmlPullParser.START_TAG:
            depth++;
            StringBuilder attrs = new StringBuilder();
            for (int i = 0; i < parser.getAttributeCount(); i++) {
                attrs.append(parser.getAttributeName(i) + "=\""
                        + parser.getAttributeValue(i) + "\" ");
            }
            sb.append("<" + parser.getName() + " " + attrs.toString() + ">");
            break;
        default:
            sb.append(parser.getText());
            break;
        }
    }
    String content = sb.toString();
    return content;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    相关资源
    最近更新 更多