java - 如何获取xml节点?
问题描述
下面是我的 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 "";
}
推荐阅读
- php - 为什么当我将 get() 方法查询结果传递给 laravel 分形 Transformer 时会创建大量查询?
- azure-data-factory - 为 Azure 数据工厂中的文件动态添加时间戳
- microsoft-graph-booking - 是否可以通过 Graph API 使用“预订页面”
- ios - Flipper Lexical o Preprocessor 问题 Flipper react-native ios 构建失败
- azure - 如何在 Azure 自动化中连接到 Az.module 而不以帐户身份运行。我正在尝试处理系统分配的身份
- javascript - React - 如何检测页面刷新和重定向用户
- intellij-idea - 2021.02之后intellij的【更新课程和资源】按钮在哪里?
- reporting-services - SSRS 字段中的四舍五入
- aws-amplify - AWS Amplify PCI DSS 证书
- phalcon - Phalcon中有很多记录时如何指定hasOne关系