【问题标题】:How to count inner tags during parsing XML with XmlPullParser如何在使用 XmlPullParser 解析 XML 期间计算内部标签
【发布时间】:2015-05-27 08:58:04
【问题描述】:

我正在使用XmlPullParser 解析布局文件,我需要计算内部标签才能识别子视图。我找到了计算每个标签的属性的方法,但找不到如何准确计算标签。

我有这样的代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#0d3fff"
            android:text="New Button 1"
            android:layout_marginRight="10dp"
            android:id="@+id/btnDef1"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/btnDef2"/>

    </LinearLayout>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/tv1"/>
</LinearLayout>

有人知道如何计算标签LinearLayout 的孩子吗? 提前致谢。

【问题讨论】:

    标签: android xml xml-parsing xmlpullparser android-xmlpullparser


    【解决方案1】:

    我不知道为什么有人要计算布局文件中的标签。如果您正在膨胀布局,请使用 getChildCount 方法或使用以下代码获取 LinearLayout 的子项计数

    int childcount = ll.getChildCount();
    for (int i=0; i < childcount; i++){
        View v = ll.getChildAt(i);
    }
    

    如果您倾向于使用 XMLPullparser,我认为没有任何直接的方法可以计算 xml 标签。你必须遍历每个标签

        int count = 0;
        XmlPullParser xpp = factory.newPullParser();
        try {
            xpp.setInput(new InputStreamReader(is));
    
            int eventType = xpp.next();
            Project p = null;
            while(eventType != XmlPullParser.END_DOCUMENT) {
                 count++;
                 String tagName = xpp.getName();
                 switch (eventType) {
                     case XmlPullParser.START_DOCUMENT:
                        break;
                    // and other cases that you want to handle
                 }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    

    【讨论】:

    • 感谢您的回答,但我发现我解释得不够……我需要计算标签!之前!解析器遍历所有这些。我需要在根标签开始循环之后,并且需要计算孩子何时停止它。我不能给它充气,因为我需要修改它并且它不在 res 文件夹中
    • 在 XML 的情况下,您必须逐步进行,直到找到 END_DOCUMENT。这就是xml的问题。您可以使用 JSON,这非常灵活。您可以制作键值对并将值作为那些 xml 标记,但我不建议这样做。不好的做法/设计/使用。
    • 是的,JSON 更灵活,我同意,也许我会看看那方面。但是在运行时设置新布局可能不是最佳实践,但在我的情况下仍然非常有用。不管怎样,谢谢你的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 2013-02-13
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    相关资源
    最近更新 更多