Как использовать нестандартные имена переменных в Java для создания XML-тегов?

#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.

3. Укажите пространство имен

Ответ №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. Спасибо!