【问题标题】:Cannot access attribute with XmlPullParser无法使用 XmlPullParser 访问属性
【发布时间】:2013-11-20 07:32:14
【问题描述】:

我有以下 XML

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<questions>
<question topic="net">
    <questiontext>Which of the following applies to TCP?</questiontext>
    <answers correct="true">
        <answer correct="true">reliable</answer>
        <answer correct="false">connectionless</answer>
        <answer correct="true">connection-oriented</answer>
        <answer correct="false">datagram-based</answer>         
    </answers>
</question>
</questions>

我正在尝试使用以下代码对其进行解析,以获取“answer”元素上“正确”属性的值

private ArrayList<MCAnswer> readAnswers(XmlPullParser parser) throws IOException, XmlPullParserException {

    // create an ArrayList to which MCAnswers will be added below
    ArrayList<MCAnswer> answers = new ArrayList<MCAnswer>();

    // starting at the <answers> element...
    parser.require(XmlPullParser.START_TAG, ns, "answers");

    // loop through the individual <answer> elements
    while (parser.next() != XmlPullParser.END_TAG) {
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            continue;
        }

        // read in answer text
        String answerText = readText(parser);

        // TODO how to get value of "correct" attribute of <answer>? 

        //debugging variables
        int numOfAttrs = parser.getAttributeCount(); //returns -1, not right!
        String element = parser.getName(); //returns "answer", right!

        String attr = parser.getAttributeValue(ns, "correct"); //returns null, not right!

    }
    return answers;
}

我的问题是 String attr = parser.getAttributeValue(ns, "正确"); 我希望它返回值“true”或“false”,但它返回 null,好像解析器找不到属性,上面的 getAttributeValues() 也返回 -1(IndexOutOfBoundsError?)但似乎我是正确的标记为 getName() 并且节点文本返回正确的值。

我做错了什么导致我无法访问该属性?

【问题讨论】:

  • 尝试使用 dom 解析器
  • parser.require(XmlPullParser.START_TAG, ns, "answers"); 返回什么?此外,我没有看到任何代码将解析器从answers 移动到第一个answer。最后,假设前两个问题的一切都按计划进行,while (parser.next() != XmlPullParser.END_TAG) 对于解析器遇到的第一个 &lt;/answer&gt; 将是错误的。也就是说,除非readText(parser) 消耗...

标签: android xmlpullparser


【解决方案1】:

我找到了答案——在解析元素的文本节点之前移动解析属性。一旦解析器进入元素,它就不能再访问属性了。

【讨论】:

    猜你喜欢
    • 2021-10-26
    • 2014-09-19
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2018-04-24
    • 2017-04-25
    • 1970-01-01
    相关资源
    最近更新 更多