如何让JAXB输出在没有前缀的子节点中包含命名空间?

时间:2011-11-08 22:06:44

标签: namespaces jaxb prefix

上帝知道我在论坛上搜索了答案,但没有看到任何答案。 这是我的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中的某些设置应该告诉编写者不要使用前缀更新根元素。

0 个答案:

没有答案