我对 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 问题。
最佳答案
根据要求,发布我的解决方案作为答案:
更新
我解决了这个问题。需要做两件事:我做了
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 问题。
问我为什么这些是必要的,我不会给你答案:)
关于Java:JAXBElement 的 QName,没有命名空间或前缀? (使用matlab),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17353082/