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