2012-09-28 17 views
1

我要讀的Android清單文件看起來像下面從XML文件中讀取特定元素內心深處的Java

<?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> 

我的目標是讀的Android值:名稱財產全部活動元素。我怎樣才能在java中實現?

+0

使用XML解析器像SAX解析器(http://www.mkyong.com/java/how-to-read-xml-file- in-java-sax-parser /)或JAXB(http://jaxb.java.net/) – gtgaxiola

回答

0

我解決了這個問題,這裏是我的代碼,

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(); 
    } 
    } 



}