Java jdom解析xml文件带冒号的属性
Java jdom解析xml文件帶冒號的屬性
轉(zhuǎn)載請標明出處:
https://dujinyang.blog.csdn.net/article/details/99644824
本文出自:【奧特曼超人的博客】
如果xml文件解析帶了冒號的屬性,一般都是要特別處理,這里是命名空間,比如android的AndroidManifest.xml,N年前遇到過一次忘記記錄,后來也忘了,當時好像用的DOM4J,這次用的JDOM,記錄下。
解決了,記錄下,分享給大家,百度到的都是沒有任何用的,這里需要解析的是屬性。
DOM4J 可以用,但是便于項目的輕量級,糾結(jié)了后,這次使用JDOM 。
以前使用的是正常節(jié)點的xml,現(xiàn)在是android的一些配置文件,所以之后出現(xiàn)一系列異常,比如:JDOM cannot handle metadata attributes with namespace prefix等等……
中間百度谷歌了一陣,沒有結(jié)果,也看了XPath、Jaxen、XNode、XDocument等等,為何這么復雜還回去不到,已經(jīng)獲取到根節(jié)點的element了,想了下,jdom應該有考慮帶解析冒號的,有的可以@代替,但jdom試了很久,沒有結(jié)果。
最后還是分析了源代碼很久才發(fā)現(xiàn)了問題:
既然我們需要的是帶冒號的節(jié)點屬性,那肯定是需要制定NameSpace命名空間的,不需要靠 XPATH 或者 jaxen的,不然它就是默認的命名空間了。
所以這里只需要指定一下就可以:
Namespace type=Namespace.getNamespace("android","http://schemas.android.com/apk/res/android"); System.out.println(ele.getAttributeValue("name",type));XML文件:(AndroidManifest.xml)
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:compileSdkVersion="29" android:compileSdkVersionCodename="6.2-2438415" android:installLocation="auto" package="com.dujinyang.xxxx" platformBuildVersionCode="23" platformBuildVersionName="6.2-2438415"><uses-feature android:glEsVersion="0x000520000"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.READ_LOGS"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/><uses-permission android:name="android.permission.GET_TASKS"/><uses-permission android:name="android.permission.RECORD_AUDIO"/><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/><application android:allowBackup="true" android:banner="@drawable/app_banner" android:debuggable="false" android:hasCode="true" android:icon="@drawable/app_icon" android:isGame="true" android:label="immqy" android:largeHeap="true" android:name="com.dujinyang.xxxx" android:theme="@style/UnityThemeSelector"><activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize" android:icon="@drawable/app_icon" android:label="immqy" android:launchMode="singleTop" android:name="com.immqy.3d.activity.UnityMainActivity" android:screenOrientation="landscape"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/><category android:name="android.intent.category.LEANBACK_LAUNCHER"/></intent-filter></activity><meta-data android:name="unity.build-id" android:value="abc53v45wtw5aasdfg"/><meta-data android:name="unity.splash-mode" android:value="1"/><meta-data android:name="unity.splash-enable" android:value="true"/><meta-data android:name="android.max_aspect" android:value="3"/><meta-data android:name="POOLSDK_CHANNEL_ID" android:value="5201314"/><meta-data android:name="POOLSDK_CUSTOM_ID" android:value="{}"/><activity android:configChanges="keyboardHidden|orientation|screenSize" android:launchMode="singleTask" android:name="com.DUJINYANG.sdk.view.WebViewActivity" android:screenOrientation="portrait"/><service android:exported="true" android:name="com.ch.sys.sdk.service.FloatViewService"/><activity android:configChanges="keyboardHidden|orientation|screenSize" android:name="com.KARL.sdk.H5WebViewActivity" android:screenOrientation="portrait"/><meta-data android:name="SBSBSB" android:value="67329"/></application> </manifest>聯(lián)系方式請看首頁,如果大家有 疑難雜癥 的可以看這里:《Bug 疑難雜癥 | 不分語言》
|| 版權(quán)聲明:本文為博主杜錦陽原創(chuàng)文章,轉(zhuǎn)載請注明出處。
總結(jié)
以上是生活随笔為你收集整理的Java jdom解析xml文件带冒号的属性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: golang chan传递数据的性能开销
- 下一篇: 你真的了解token续期嘛?