我对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问题。
问我为什么这些都是必要的,我不会给你答案:)