Разбор атрибута узла XML с префиксами - XSTREAM / JAVA - PullRequest
0 голосов
/ 21 марта 2012

Я использую StaxDriver с XStream и пытаюсь проанализировать этот XML:

<cad:MyObj xmlns:cad="namespace" cad:testeId="873" >
  <cad:node1>value node 1</cad:node1>
</cad:MyObj>

в объект.

Я могу разобрать node1 с префиксом, но я не знаю, как настроить XStream для Stax, чтобы использовать префикс cad с атрибутами (testeId).

Вот мой конф:

QNameMap qnameMap = new QNameMap(); 
            qnameMap.setDefaultPrefix("cad");
            qnameMap.setDefaultNamespace("namespace");
            StaxDriver stax = new StaxDriver(qnameMap);
            stax.getInputFactory().setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, true);
            stax.setRepairingNamespace(true);
            stax.setQnameMap(qnameMap);
            xstream = new XStream(stax); 
            xstream.alias("MyObj", MyObj.class);
            xstream.useAttributeFor(MyObj.class, "testeId");

Я пытался "обмануть" это:

xstream.aliasField("cad:testeId", ProdutoVersao.class, "testeId");

, но не сработало = /

Надеюсь, кто-то знает, как это сделать.

1 Ответ

0 голосов
/ 08 апреля 2012

Хорошо. Я думаю, что нет решения для этого с помощью XStream.

Я перешел на JAXB с преобразователем префикса пространства имен:

http://blog.bdoughan.com/2011/11/jaxb-and-namespace-prefixes.html

Marshaller m = context.createMarshaller();
ProdutoVersaoPrefixMapper mapper = new ProdutoVersaoPrefixMapper();
m.setProperty("com.sun.xml.internal.bind.namespacePrefixMapper", mapper);

С помощью этого кода узел и его атрибуты получают префикс.

...