2013-06-27 90 views
1

我對JAXB和Java相當陌生。我使用了xjc,並且使用我自己的命名空間映射器重寫了自定義ns1 ns2等命名空間。 Java通過Matlab運行,所以它的格式與通常的java完全不同。但是,任何直接的Java答案都很好,因爲我應該可以將其轉換。Java:QName for JAXBElement,沒有名稱空間或前綴? (使用matlab)

下面是我想:

<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是稍後添加到包含字符串元素的列表。

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問題,如果不符合標準,很抱歉。

UPDATE

我解決了這個。被要求兩兩件事:不是「嗒嗒」,我做了

blah=java.lang.String('blah') 

東西我忘了MATLAB內對java做。其次,在製作JAXBElement而不是使用inner_class變量時,如果我使用blah.getClass(),它將打印出沒有任何限制。我意識到現在這是一個更多的問題,而不是一個QName問題。

+0

嗯,我這解決了我自己,我不會有答案。 – tenwest

+0

PCoukd你添加你的解決方案作爲答案? –

回答

0

按照要求,張貼我的解決方案作爲一個答案:

UPDATE

我解決了這個。有兩件事是必需的:我做了

blah = java.lang.String('blah') 我忘了在matlab中爲java做些什麼。我相信當輸入'blah'時,在將matlab字符串轉換爲java字符串時出錯了。

其次,使得當的JAXBElement,而不是使用一個變量inner_class - 其使用

classlist = class.getClass.getClasses(); 
inner_class = classlist(1); 

創建我使用blah.getClass()(其中,等等爲字符串的變量)。

此打印出來沒有任何資格。我意識到,現在這是一個比QName問題更爲麻煩的問題。

向我爲什麼任何這些都是必要的,併爲你:)

相關問題