#java #android #xml #jaxb
#java #Android #xml #jaxb
Вопрос:
Я пытаюсь написать AndroidManifest.xml файл программно через Java с использованием Jaxb. Проблема возникает при определении атрибутов, которые следуют за строкой: соглашение об именовании строк. Например, элемент manifest определяется таким образом:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="string"
android:sharedUserId="string"
android:sharedUserLabel="string resource"
android:versionCode="integer"
android:versionName="string"
android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
. . .
</manifest>
Делая это из Java, я не могу аннотировать атрибуты, потому что xmlns: android и т.д. не являются допустимыми переменными Java.
Каков наилучший способ преодолеть это, все еще используя Jaxb и не прибегая к технике StringBuilder для генерации XML?
Комментарии:
1. Какую реализацию Java вы запустили / попробовали?
2. Как я уже сказал, я пытаюсь сделать это с помощью Jaxb. Итак, у меня нет проблем с определением корня и его подэлементов, но с атрибутами я застрял, потому что они не соответствуют соглашениям об именовании переменных Java.
Ответ №1:
Вот пример из javadoc javax.xml.bind.annotation.XmlElement:
@XmlElement(name="item-price")
public java.math.BigDecimal price;
Параметр name — это то, что вы увидите в XML.
Но этот android: префикс пространства имен и должен отображаться в соответствии с определением пространства имен, которое является параметром пространства имен:
@XmlElement(name="item-price", namespace="http://schemas.android.com/apk/res/android")
public java.math.BigDecimal price;
После маршалинга вы, скорее всего, увидите «ns1:» вместо android:, но это нормально.
Самый простой способ получить аннотированный Java-код: напишите (или найдите) XML-схему и запустите ее xjc
. Работает все время — почти 😉
Комментарии:
1. Да, параметр name также работает с аннотациями @XmlAttribute. Спасибо!