2

我对 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问题。

4

1 回答 1

0

根据要求,发布我的解决方案作为答案:

更新

我解决了这个问题。需要做两件事:而不是“废话”,我做了

blah=java.lang.String('blah') 我忘记在 matlab 中为 java 做的事情。我相信当输入 'blah' 时,将 matlab 字符串转换为 java 字符串时出现了问题。

其次,在制作 JAXBElement 时,不要使用 inner_class 变量——它是使用创建的

classlist = class.getClass.getClasses();
inner_class = classlist(1);

我使用 blah.getClass() (其中 blah 是字符串的变量)。

这打印出来没有任何条件。我现在意识到这更像是一个混编问题而不是 QName 问题。

问我为什么这些都是必要的,我不会给你答案:)

于 2013-07-05T20:37:57.590 回答