2013-03-13 83 views
0

我通過Websphere Message Broker收到XML文件,但是當我使用Java處理它時,它會在輸出中給我一個非格式的文件。將xml傳入文件轉換爲文本

XML輸入的文件:

<?xml version="1.0" encoding="UTF-8"?> 
<article href="http://www.ensa-agadir.ac.ma/arti234"> 
    <titre>application de web sémantique</titre> 
    <nombrePages>12</nombrePages> 
    <auteur rond="principale"> 
     <nom>Hassani</nom> 
     <prenom>Jamal</prenom> 
     <etablissement>Ensa-Agadir</etablissement> 
    </auteur> 
</article> 

爪哇計算(用於處理消息):

MbMessage outMessage = new MbMessage(); 
MbMessageAssembly outAssembly = new MbMessageAssembly(assembly, outMessage); 
MbElement omroot = outMessage.getRootElement(); 
MbElement xmlnsc = omroot.createElementAsLastChild ("XMLNSC"); 
MbElement valueEl = xmlnsc.createElementAsFirstChild(MbElement.TYPE_VALUE, "VALUE", 
       new String ((byte[])message.getRootElement().getFirstElementByPath("/BLOB/BLOB").getValue())); 
out.propagate(outAssembly); 

XML輸出文件: enter image description here

像它不承認任何UTF-8字符,如:報價<>等...所以我認爲轉換傳入文件爲文本就能解決問題。但我不知道該怎麼做,或者如果這是最好的解決方案。

你對此有什麼想法嗎?謝謝:)

編輯:該消息不應該只是逃脫,它應該被轉換和良好的編碼輸出。

回答

1

好了,我已經找到了解決辦法。我不得不選擇XMLNSC解析器HTTP輸入節點,而不是默認其一是BLOB解析器,我不得不改變我的Java計算代碼:

MbMessage outMessage = new MbMessage(); 
MbMessageAssembly outAssembly = new MbMessageAssembly(assembly, outMessage); 
MbElement omroot = outMessage.getRootElement(); 
MbElement xmlnsc = omroot.createElementAsLastChild ("XMLNSC"); 
MbElement valueEl = xmlnsc.createElementAsFirstChild(MbElement.TYPE_VALUE, "VALUE", 
      new String ((byte[])message.getRootElement().getFirstElementByPath("XMLNSC/article/titre").getValue())); 

// And use getFirstElementByPath field by field not trying to display all of it like text 

out.propagate(outAssembly); 

謝謝你們: )

0

即時通訊不好在java中,但我觀察到符號是用html實體值轉換看到這個鏈接http://www.w3schools.com/tags/ref_entities.asp你可以得到所有的實體。

不要投票,我只是幫助他觀察我所知道的事情。

+0

謝謝。是的,我確定我可以得到所有實體並理解它們。但我需要的是將它們轉換爲設置輸出和正確的XML消息 – Copernic 2013-03-13 18:51:42

+0

看到這篇文章你得到你的答案http://stackoverflow.com/questions/7505387/im-looking-for-a-java-html-encoder – Civa 2013-03-13 19:01:50

+0

如果我的帖子對你完全使用,你可以打勾嗎? – Civa 2013-03-13 19:13:59

0

實際上你甚至可以更簡化一下,有一個方法Mbelement.getValueAsString(),它可以避免你必須使用一個強制類型轉換爲字節數組和String構造函數。

因此,例如,您

MbElement valueEl = xmlnsc.createElementAsFirstChild(MbElement.TYPE_VALUE, "VALUE", new String((byte[]) message.getRootElement().getFirstElementByPath("XMLNSC/article/titre").getValue()));

變爲:

MbElement valueEl = xmlnsc.createElementAsFirstChild(MbElement.TYPE_VALUE, "VALUE", message.getRootElement().getFirstElementByPath("XMLNSC/article/titre").getValueAsString());