java - 如何获取xml节点?

标签 java android

下面是我的 xml,它将位于设备的一个文件夹中,我将读取该 xml 文件。如何使用 XmlPullParser 在 android 中获取/读取或返回 xml 节点。

<?xml version="1.0" encoding="utf-8"?>
<appLayouts>
    <AIRLINE_FORM sendSelectionEvent="false">
        <RESULT multiSelect="false"></RESULT>
    </AIRLINE_FORM>
    <ALLOWANCES_FORM sendTableEditEvent="false" sendSelectionEvent="true">
        <RESULT multiSelect="false">
            <field header="Category" size="75" align="left" edit="false"></field>
            <field header="Allowance" size="-1" align="left" edit="false"></field>
       </RESULT>
    </ALLOWANCES_FORM>
</appLayouts>

因此,如果我将 AIRLINE_FORM 作为 xml 节点,我只想返回 AIRLINE_FORM 的完整 xml 节点,即它必须返回:

<AIRLINE_FORM sendSelectionEvent="false">
    <RESULT multiSelect="false"></RESULT>
</AIRLINE_FORM>

我试过了

public String parseXML(String sTargetName)
{
    String XmlNode = "";
    try {
        int eventType = parser.getEventType();

        while (eventType != XmlPullParser.END_DOCUMENT) {
            String name;
            switch (eventType) {
                case XmlPullParser.START_DOCUMENT:
                    break;
                case XmlPullParser.START_TAG:
                    name = parser.getName();
                    if (name.equals(sTargetName)) {
                        XmlNode = parser.getText();
                        //parser.getAttributeValue(null,"id");
                        Log.d("Task2/Parser", "Start tag: "+parser.getName());

                        Log.d("Task2/Parser", "Start tag -text: "+parser.getText());
                    }
                    break;
                case XmlPullParser.END_TAG:
                    name = parser.getName();
                    Log.d("Task2/Parser", "End tag: "+parser.getName());
                case XmlPullParser.TEXT:
                    Log.d("Task2/Parser", "Text "+parser.getText());

            }
            eventType = parser.next();
        }
    }catch (XmlPullParserException ex){
        //AppLog.WriteMessage(AppLog.LogType.ERROR, ex.Message);
        Log.d("Log_d"," Exception: "+ ex.toString());
    }
    catch (IOException ex){
        //AppLog.WriteMessage(AppLog.LogType.ERROR, ex.Message);
        Log.d("Log_d"," Exception: "+ ex.toString());
    }
    return XmlNode;
}

最佳答案

您需要传递要访问的每个节点的节点名称。这是帮助您获取节点的代码

public String getValue(Element item, String str) {      
    NodeList n = item.getElementsByTagName(str);        
    return this.getElementValue(n.item(0));
}

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  ){
                         return child.getNodeValue();
                     }
                 }
             }
         }
         return "";
  } 

关于java - 如何获取xml节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54070255/

相关文章:

java - 动态创建对象的依赖注入(inject)的好处

自定义 ListView 适配器上的 Android onclick 事件不起作用

android - 如何在 MacOs Lion 上设置 cocos2dx for android?

android - 如何在纸牌游戏中使用网格布局

java - 使用 MediaRecorder 在 Android 上录制屏幕时无法获取 Surface

java - 无法使用 Guice 和 Vertx 将同一实例注入(inject)多个 Verticles

java - 如何使组件跨越 GridBagLayout 中的多个单元格

java - 需要创建类型为 TIMESTAMP 的列但不更新现有行

java - Android - 获取 Facebook 集成的哈希键

android - 如何使用 CSS 媒体查询检测 Android 设备的默认字体大小?