宣言されていない名前空間とJavaの構文解析XML

クリス屋根:

私たちの新しいAndroidアプリがリリースされるたびに、私は、当社のウェブサイト上のアプリの情報を更新する必要があります。私が読んで、自動的にアプリ情報を更新しようとしてAndroidManifest.xmlサーバーにアップロードする際のapkに。

私が使用AXMLResourceしてjdom2取得するAndroidManifest.xmlと、それを解析します。

final Namespace NS = Namespace.getNamespace("http://schemas.android.com/apk/res/android");

zipFile = new ZipFile(apkPath);
ZipEntry zipEntry = new ZipEntry("AndroidManifest.xml");
inputStream = zipFile.getInputStream(zipEntry);
AXMLResource axmlResource = new AXMLResource();
axmlResource.read(inputStream);

SAXBuilder saxBuilder = new SAXBuilder();
Document document = saxBuilder.build(new ByteArrayInputStream(axmlResource.toXML().toString().getBytes("UTF-8")));
Element root = document.getRootElement();
System.out.println(root.getAttributeValue("versionCode",NS));
System.out.println(root.getAttributeValue("versionName",NS));

しかし、私は常に取得するには、

属性の接頭辞「データ」「データ:versionCode」要素型「マニフェスト」がバインドされていませんに関連付けられています

そして、私は印刷しAndroidManifest.xml、見つかったdata名前空間がunclaredです。

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    data:versionCode="344"
    data:versionName="3.2.8"

私がチェックしたときアンドロイドスタジオのドキュメントを、そこに使用した名前空間を宣言しました。

それから私は、これは我々のアプリの開発者の不規則性によって引き起こされるかもしれないと思います。

アプリしかし、なぜ、私はさらに考えると、AndroidManifest.xml宣言されていない名前空間では、解放することができ、その後、私はFacebookの、ユーチューブ、CentOSの、BaiduのディスクとアリペイのようないくつかのAPKをダウンロードして、宣言されていない名前空間を使用していないだけでCentOSのを見つけました。

にとって com.google.android.youtube.apk

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    http:versionCode="1425572340"
    http:versionName="14.25.57"

属性の接頭辞は「http」は「http:versionCodeは、」要素型に関連付けられている「マニフェストは」バインドされていません

にとって com.facebook.katana-225.0.0.47.118.apk

<?xml version="1.0" encoding="utf-8"?>
<manifest
        xmlns:android="http://schemas.android.com/apk/res/android"
        manifest:versionCode="158425934"
        manifest:versionName="225.0.0.47.118"

接頭辞「マニフェスト」属性の:要素型 『マニフェスト』がバインドされていませんに関連する「マニフェストversionCode」

だからここでundeclased名前空間を使用することcommanであるAndroidManifest.xmlが、私はそれをどのようにPASEができますか?

マイケル・ケイ:

技術的にはあなたのファイルは、整形式XML名前空間ではなく、整形式のXMLです。近代的なXMLツールの大半は、名前空間整形されたXMLを処理(または生成)します。あなたはまだ名前空間整形されていないXMLを処理するXMLパーサを見つけることができるなら、あなたはあなたのニーズを(たとえば、あなたは置き換えることができ満たしているいくつかの方法であなたのXML「修理」にこれを使用することができますmanifest:versionCodeによってmanifest-versionCode)。

しかし、むしろこのような方法でXMLを修復するよりも、それはあなたがツールの選択に拘束していないので、最初の場所で名前空間整形式のXMLを作成するために、多くの方が良いだろう。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=229106&siteId=1