使用前缀解析XML节点的属性 - XSTREAM / JAVA

时间:2012-03-20 20:20:51

标签: java xml xstream

我正在使用StaxDriver和XStream并试图解析这个XML:

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

进入一个物体。

我可以使用前缀解析node1,但我不知道如何使用Stax配置XStream以使用带有属性(cad)的前缀testeId

这是我的conf:

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 :(得分:0)

好。我认为使用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);

使用此代码,节点及其属性将获得前缀。