Java:JAXBElement的QName,没有名称空间或前缀? (使用matlab)

时间:2013-06-27 20:59:45

标签: java matlab jaxb jaxb2 qnames

我是JAXB和Java的新手。我使用了xjc,并使用我自己的namespacemapper覆盖了自定义的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 问题。

1 个答案:

答案 0 :(得分:0)

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

更新

我解决了这个问题。需要做两件事:而不是'blah',我做了

嗒嗒= java.lang.String中( '等等') 我忘记在matlab中为java做的事情。我相信在输入'blah'时,将matlab字符串转换为java字符串会出错。

其次,在创建JAXBElement时,而不是使用使用

创建的inner_class变量
classlist = class.getClass.getClasses();
inner_class = classlist(1);

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

这打印出来没有任何资格。我现在意识到这更像是一个问题,而不是QName问题。

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