上帝知道我在论坛上搜索了答案,但没有看到任何答案。 这是我的JAXB代码读取的简化XML。涉及2个名称空间。 xyz和abc。这两个在两个不同的模式文件中定义。 xjc为它们生成两个不同的包。以下文件可以很好地读入这些类,甚至可以编写它。
<xyz:xyz xsi:schemaLocation="urn:xyz xyz.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xyz="urn:xyz">
<session>
<App xsi:schemaLocation="urn:abc abc.xsd" xmlns="urn:abc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<AppItem att1="1234"/>
</App>
</session>
</xyz:xyz>
这是它写它的方式。
<ns3:xyz xmlns:ns2="urn:abc" xmlns:ns3="urn:xyz">
<session>
<ns2:App>
<ns2:AppItem att1="1234"/>
</ns2:App>
</session>
</ns3:xyz>
现在我知道NamespacePrefixMapper,我可以将ns2和ns3更改为我想要的值。我想要这个。基本上我想主要XML的原始形式。 App元素应包含其自身的所有信息,而不是创建前缀。
<xyz:xyz xmlns:xyz="urn:xyz">
<session>
<App xsi:schemaLocation="urn:abc abc.xsd" xmlns="urn:abc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<AppItem att1="1234"/>
</App>
</session>
</xyz:xyz>
有没有人知道如何实现这一目标?似乎AppType.java中的某些设置应该告诉编写者不要使用前缀更新根元素。