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



我对JAXB和Java相当陌生。我使用了xjc,并且正在使用自己的namespacemapper覆盖自定义的ns1-ns2-etc命名空间。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问题。

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

更新

我解决了这个问题。需要两件事:我制作了,而不是"废话"

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

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

最新更新