2016-03-12 4 views
0

Я хочу, чтобы Marshall Java-объект, где одно из его полей имеет небольшой xml-контент. Мол,Проблема с сортировкой в ​​Java

feature="<feat>T12</feat>"; 

Когда я попытался Маршаллу этого, вывод XML показывает вверх как

&lt; fear &gt; T12 &lt; feat &gt; 

мне нужно точное значение у меня выше. Может ли кто-нибудь помочь?

Спасибо, Viswanath

+0

вам нужно иметь фактический элемент (например, ' T12') или CDATA вариант Do: ( T12]]> как '') – ljgw

+0

Можете ли вы попробовать предложения от http://stackoverflow.com/questions/1506663/can-i-force-jaxb-not-to-convert-into-quot-for-example-when-marshalling-to и http://stackoverflow.com/ вопросы/3289036/как к предотвращать-JAXB-маскирование-а-строка – mdp

ответ

1

символы, такие как < или > являются недопустимыми в качестве атрибута в XML. Операция marshalling цитирует эти символы, чтобы иметь действительный XML-файл.

Если вы отменили маркер вашего документа с помощью анализатора xml, вы получите реальную стоимость. Не пытайтесь читать xml без реального синтаксического анализатора xml.

0

Если ваш объект Java имеет свойство, содержащее часть XML, рассмотрите его как заданный тип XML (если вы знаете предполагаемую схему этого фрагмента XML) или объявите его как «любой» элемент или «any», поэтому он будет сопоставлен с структурой DOM в Java, которая может быть рассмотрена структурно корректно в вашем Java-коде.

Если вы все еще хотите просто передать XML-данные в строку, которую я НЕ рекомендую, представление, созданное маршаллером, возможно, является единственно приемлемым и правильным. После unmarshalling вы вернете свой фрагмент XML точно так же, как вы ввели его выше в своем примере, и вы можете иметь дело с ним как строку так же, как и до маршаллинга.

Я бы рекомендовал вам определить схему фрагмента XML в XSD, а затем использовать JAXB «XML-to-Java compiler» (XJC) для генерации кода Java для него, что легко можно сделать автоматически, если вы используйте maven или аналогичную систему сборки. Затем вы должны добавить соответствующие аннотации к вашему классу Java, который содержит это свойство, и ссылаться на сгенерированный класс как тип вашего свойства, который затем даст вам чистый способ маршалировать и развязать все как истинную структуру XML (см. пример ниже).

Еще лучше определить как можно больше из ваших классов данных в XSD и использовать генерацию кода на всем протяжении. Это значительно облегчит многое.

Пример: XSD определение значения для свойства "особенность"

<xs:element name="feature"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="feat" type="string"/> 
     <!-- additional possibilities/elements/whatever... --> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

Тогда в классе Java, сделайте следующее:

@XmlRootElement 
public class ClassWithFeature { 
    private Feat feature; 

    public Feat getFeature() { return feature; } 
    public void setFeature(final Feat feature) { this.feature = feature; } 
} 

Затем инициализировать его следующим образом:

Feature feat = new Feature(); 
feat.setFeat("T12"); 
myOb.setFeature(feat); 

Есть плагины XJC, чтобы сделать эту инициализацию более удобной т, как Fluent-Api или шаблон строитель: jaxb-rich-contract-plugin

После сортировочных, то XML будет выглядеть примерно так:

<ClassWithFeature> 
    <feature> 
     <feat>T12</feat> 
    </feature> 
</ClassWithFeature> 

Что, вероятно, что вы хотите ...

Смежные вопросы