转载请标明出处:
https://dujinyang.blog.csdn.net/article/details/99644824
本文出自:【奥特曼超人的博客】
如果xml文件解析带了冒号的属性,一般都是要特别处理,这里是命名空间,N年前遇到过一次忘记记录,后来也忘了,这次再记录下。
解决了,记录下,分享给大家,百度到的都是没有任何用的,这里需要解析的是属性。
DOM4J 可以用,但是便于项目的轻量级,纠结了后,这次使用JDOM 。
以前使用的是正常节点的xml,现在是androID的一些配置文件,所以之后出现一系列异常,比如:JDOM cannot handle Metadata attributes with namespace prefix
等等……
中间百度谷歌了一阵,没有结果,也看了XPath、Jaxen、XNode、Xdocument等等,为何这么复杂还回去不到,已经获取到根节点的element了,想了下,jdom应该有考虑带解析冒号的,有的可以@代替,但jdom试了很久,没有结果。
最后还是分析了源代码很久才发现了问题:
既然我们需要的是带冒号的节点属性,那肯定是需要制定nameSpace命名空间的,不需要靠
XPATH
或者 jaxen
的,不然它就是默认的命名空间了。所以这里只需要指定一下就可以:
namespace type=namespace.getnamespace("androID","http://schemas.androID.com/apk/res/androID");System.out.println(ele.getAttributeValue("name",type));
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>
联系方式请看首页,如果大家有 疑难杂症 的可以看这里:《Bug 疑难杂症 | 不分语言》
|| 版权声明:本文为博主杜锦阳原创文章,转载请注明出处。
总结以上是内存溢出为你收集整理的jdom 解析xml文件带冒号的属性全部内容,希望文章能够帮你解决jdom 解析xml文件带冒号的属性所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)