我对 JAXB 和 Java 相当陌生。我使用了 xjc,并使用我自己的命名空间映射器覆盖了自定义 ns1 ns2 等命名空间。java 是通过 Matlab 运行的,因此它的格式与通常的 java 不同。不过,任何直接的 Java 答案都可以,因为我应该能够转换它。
这是我想要的:
<String> blah </String>
相反,在编组之后,我得到:
<String xmlns:ns4="http://www.w3.org/2001/XMLSchema" xsi:type="ns4:string">
blah
</String>
无论如何要删除 'xmlns:ns4' 而不是从元素中删除什么?
对应的(matlab)java代码为:
a=javax.xml.namespace.QName('String');
c=JAXBElement(a, inner_class, 'blah');
其中 c 稍后被添加到包含 String 元素的列表中。
jxb = JAXBContext.newInstance('mypackage');
jaxbMarshaller = jxb.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.setProperty('com.sun.xml.internal.bind.namespacePrefixMapper', MyCustomMapper());
jaxbMarshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, 'http://thelocationofmyschema.com')
jaxbMarshaller.marshal(jaxbclassinstance, file);
我的 XML 是功能性的,但为了整洁/一致,如果它相对简单,我想删除那个 xmlns 垃圾。
谢谢!这是我的第一个 stackoverflow 问题,如果没有达到标准,请见谅。
更新
我解决了这个问题。需要做两件事:而不是'blah',我做了
blah=java.lang.String('blah')
我忘记在matlab中为 java 做的事情。其次,在制作JAXBElement时,如果我使用blah.getClass()而不是使用 inner_class 变量,它会在没有任何限制的情况下打印出来。我现在意识到这更像是一个混编问题而不是QName问题。