[英]Reading particular elements deep inside from an XML file java
I have to read an android manifest file which look like the following, 我必须阅读一个如下所示的android清单文件,
<?xml version="1.0" encoding="utf-8"?>
<manifest android:versionCode="92" android:versionName="1.9.7B92" package="com.rechild.advancedtaskkiller"
xmlns:android="http://schemas.android.com/apk/res/android">
<application android:label="@string/app_name" android:icon="@drawable/icon2">
<activity android:label="@string/app_name" android:name=".AdvancedTaskKiller" android:launchMode="singleTask" android:configChanges="keyboardHidden|orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="com.rechild.intent.action.ADVANCED_TASK_KILLER_FREE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name=".NewSettings" />
<activity android:name=".IgnoreListActivity">
<intent-filter>
<action android:name="com.rechild.advancedtaskkiller.intent.action.IgnoreList" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name=".HealthActivity" />
<activity android:name=".LogActivity" />
<activity android:name=".HelpActivity" />
<activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation" />
<receiver android:name=".AutoStartReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<service android:name=".BackService" android:exported="true" />
<receiver android:label="@string/app_name" android:icon="@drawable/icon2" android:name=".OneClickAppWidgetProvider">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_provider" />
</receiver>
<receiver android:name=".AlarmReceiver" />
</application>
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-sdk android:minSdkVersion="3" />
<supports-screens android:anyDensity="true" android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" />
</manifest>
My goal is to read the values of the android:name property in all activity elements. 我的目标是读取所有活动元素中android:name属性的值。 How can I achieve that in java?
如何在Java中实现?
I solved this problem, here is my code, 我解决了这个问题,这是我的代码,
package mytest;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
*
* @author
*/
public class ManifestParser {
public static void Parse(String fileName) {
try
{
File file = new File(fileName);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file);
doc.getDocumentElement().normalize();
System.out.println("Root element " + doc.getDocumentElement().getNodeName());
NodeList nodeLst = doc.getElementsByTagName("application");
System.out.println("Information of all activities");
for (int s = 0; s < nodeLst.getLength(); s++) {
Node fstNode = nodeLst.item(s);
if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
Element fstElmnt = (Element) fstNode;
NodeList fstNmElmntLst = fstElmnt.getChildNodes();
int sz=fstNmElmntLst.getLength();
for(int nodes=0;nodes<sz;nodes++)
{
Node tempNode=fstNmElmntLst.item(nodes);
if (tempNode.getNodeType() == Node.ELEMENT_NODE)
{
Element tmpElmnt = (Element) tempNode;
NamedNodeMap nn=tmpElmnt.getAttributes();
if(tmpElmnt.getNodeName().equals("activity"))System.out.println("a: "+tmpElmnt.getAttribute("android:name"));
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.