11

我正在实现 XMPP 的自制子协议,并且我正在使用 StAX 和 JAXB 的组合来解析/编组消息。当我整理一条消息时,我最终会收到大量未定义的命名空间声明:

   <ns2:auth xmlns:ns2="urn:ietf:params:xml:ns:ilf-auth" 
   xmlns:ns4="ilf:iq:experiment:power" xmlns:ns3="ilf:iq:experiment:init" 
   xmlns:ns5="ilf:iq:experiment:values" xmlns:ns6="ilf:iq:experiment:result" 
   xmlns:ns7="ilf:iq:experiment:stop" xmlns:ns8="ilf:iq:experiment:end">
   compton@ilf</ns2:auth>

代替:

   <ns:auth xmlns:ns="urn:ietf:params:xml:ns:ilf-auth>compton@ilf</ns:auth>

有什么办法可以转掉吗?

所有这些名称空间都用于由 JAXB 编组/解组的不同消息中,但每条消息都使用一个名称空间。

PS。我不是 XML 专家,如果我犯了一些愚蠢的错误,请不要骂我;)

4

1 回答 1

11

您正在寻找的功能是在issue 103中作为对 JAXB 问题跟踪器的增强而请求的。增强被拒绝了,因为 JAXB 作者发现在实际序列化开始确定实际需要哪些名称空间之前再次遍历对象树太昂贵了。

尽管相当臃肿,但不必要的名称空间并没有使 XML 文档失效。如果你真的需要节省几个字节并且额外的计算成本是可以承受的,那么编写你自己的 XML 处理器/过滤器应该很容易,它接受 JAXB 输出,解析文档并编写一个没有未使用的命名空间定义的新文档.

于 2009-11-04T14:26:45.283 回答