JAXB- @XmlMixed использование для чтения @XmlValue и @XmlElement

Я видел аналогичный вопрос, который был отправлен здесь, но это не помогло мне решить проблему, поэтому я размещаю свой вопрос здесь, чтобы узнать, может ли кто-то изменить мой код, чтобы он работал.

Вопрос: Как получить доступ к смешанному контенту String и сохранить его в методе setPhrase (String value)?

caption.xml:

         

Hello World.

Caption.java:

 package com; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementRef; import javax.xml.bind.annotation.XmlElementRefs; import javax.xml.bind.annotation.XmlMixed; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlRootElement(name = "p") @XmlType(propOrder = { "att1", "att2", "att3", "phrase", "subelement"}) public class Caption { private String att1; private String att2; private String att3; private String phrase; private Subelement subelement = new Subelement(); @XmlMixed public void setPhrase(String value) { this.phrase = value; } public String getPhrase() { return phrase; } @XmlElementRefs({@XmlElementRef(name = "subelement", type = Subelement.class)}) @XmlMixed public void setSubelement(Subelement subelement ) { this.subelement = subelement; } public Subelement getSubelement() { return subelement; } @XmlAttribute public void setAtt1( String att1 ) { this.att1 = att1; } public String getAtt1() { return att1; } @XmlAttribute public void setAtt2( String att2 ) { this.att2 = att2; } public String getAtt2() { return att2; } @XmlAttribute public void setAtt3( String att3 ) { this.att3 = att3; } public String getAtt3() { return att3; } } 

После использования JAXB unmarshall и marshall я могу получить все, что было конвертировано в объект, и сохранить и сохранить смайлики, за исключением фактической фразы «Hello World». Я знаю, что для этого сложного элемента я должен использовать какой-то @XmlMixed, но я не могу понять это.

Мой текущий output.xml:

          

Desire output.xml: (то же, что и caption.xml)

          

Hello World.

Заранее благодарю за любую помощь, я могу получить доступ к этому значению и сохранить его в методе setPhrase (String value).

Я попытаюсь ответить на ваш вопрос с примера:

Input.xml

В этом примере мы будем использовать следующий XML-документ. root элемент имеет смешанный контент. Смешанный континент означает, что текстовые узлы могут смешиваться с элементами. Поскольку может отображаться более одного текстового узла, унарное свойство не подходит.

    Hello  World   

демонстрация

Следующий код будет использоваться для чтения в форме XML для объекта, а затем для записи в XML.

 package forum10940267; import java.io.File; import javax.xml.bind.*; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Root.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); File xml = new File("src/forum10940267/input.xml"); Root root = (Root) unmarshaller.unmarshal(xml); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(root, System.out); } } 

ИСПОЛЬЗОВАТЬ СЛУЧАЙ № 1 – один список для хранения смешанного контента

@XmlMixed чаще всего используется с другой аннотацией, так что полученный List содержит как элементный, так и текстовый контент. Одно из преимуществ этого заключается в том, что порядок поддерживается таким образом, чтобы документ можно было отключить.

 package forum10940267; import java.util.*; import javax.xml.bind.annotation.*; @XmlRootElement public class Root { private List mixedContent = new ArrayList(); @XmlElementRef(name="root", type=Root.class) @XmlMixed public List getMixedContent() { return mixedContent; } public void setMixedContent(List mixedContent) { this.mixedContent = mixedContent; } } 

Вывод

Выход соответствует входу.

    Hello  World   

USE CASE # 2 – Отдельный список для смешанного контента

Вы также можете ввести отдельное свойство списка для текстового содержимого.

 package forum10940267; import java.util.*; import javax.xml.bind.annotation.*; @XmlRootElement public class Root { private List mixedContent = new ArrayList(); private List text; @XmlElementRef(name="root", type=Root.class) public List getMixedContent() { return mixedContent; } public void setMixedContent(List mixedContent) { this.mixedContent = mixedContent; } @XmlMixed public List getText() { return text; } public void setText(List text) { this.text = text; } } 

Вывод

Выход больше не соответствует входу.

      Hello World  

ИСПОЛЬЗОВАНИЕ CASE # 3 – Свойство String для текстового содержимого

Поскольку текстовые узлы могут встречаться несколько раз в смешанном контенте, свойство non-List не подходит и кажется, что аннотация @XmlMixed игнорируется.

 package forum10940267; import java.util.*; import javax.xml.bind.annotation.*; @XmlRootElement public class Root { private List mixedContent = new ArrayList(); private String text; @XmlElementRef(name="root", type=Root.class) public List getMixedContent() { return mixedContent; } public void setMixedContent(List mixedContent) { this.mixedContent = mixedContent; } @XmlMixed public String getText() { return text; } public void setText(String text) { this.text = text; } } 

Вывод

       
  • JAXB сортирует XMPP stanzas
  • Как разрешить java.lang.NoClassDefFoundError: javax / xml / bind / JAXBException в Java 9
  • java.lang.VerifyError: ожидание фрейма стека в целевой ветке JDK 1.7
  • Определение пространств имен Spring JAXB без использования NamespacePrefixMapper
  • JAXB: Как игнорировать пространство имен во время развязывания XML-документа?
  • Java / JAXB: атрибуты Unmarshall XML для определенных атрибутов объектов Java
  • Как представить пустое значение как пустой элемент с помощью JAXB?
  • Как настроить сериализацию списка объектов JAXB для JSON?
  • JAXB Marshalling Unmarshalling с CDATA
  • Что такое JAXB и почему я должен его использовать?
  • Можно ли программно настроить JAXB?
  • Interesting Posts

    onNewIntent () и зарегистрированные слушатели

    Как вы получаете встроенный инструмент сравнения Eclipse, чтобы игнорировать различия в пробелах?

    Перенос почты: пересылка писем в учетную запись IMAP

    Почему этот код Parallel.ForEach заморозит программу?

    Получите IPrincipal от токена носителя OAuth в OWIN

    Синхронизация / резервное копирование конфигурации расширений Chrome для повторного использования

    Hibernate: индивидуальная ленивая загрузка, необязательно = false

    Получение каталога приложения из приложения WPF

    jqGrid Subgrid с «локальными» данными

    Определите, является ли загруженный файл изображением (любым форматом) в MVC

    Подавление «никогда не используется» и «никогда не назначается» предупреждениям в C #

    Node.js Обработка исключений при передовом опыте

    сравнение баз данных и генерация SQL-скрипта с использованием Liquibase

    filter: blur (1px); не работает в firefox, IE и opera

    Можно ли преобразовать существующую установку Firefox в ESR без переустановки?

    Давайте будем гением компьютера.