0

Websphere Message Broker を介して XML ファイルを受信しましたが、それを Java で処理すると、フォーマットされていないファイルが出力されます。

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>

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("/BLOB/BLOB").getValue()));
out.propagate(outAssembly);

XML 出力ファイル: ここに画像の説明を入力

:引用符<>などの utf-8 文字を認識していないようなので、受信ファイルをテキストに変換すると問題が解決すると思います。しかし、それを行う方法、またはそれが最善の解決策であるかどうかはわかりません。

これについて何か考えはありますか?ありがとうございました :)

編集:メッセージはエスケープするだけでなく、変換して出力に適切にエンコードする必要があります。

4

4 に答える 4

1

さて、私は解決策を見つけました。デフォルトのBLOBパーサーではなく、HTTP入力ノードでXMLNSCパーサーを選択する必要があり、 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);

君たちありがとう :)

于 2013-03-18T11:30:51.213 に答える
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());

于 2013-03-21T13:27:02.693 に答える
0

ここでの問題は、入力メッセージ全体を BLOB として値として持つ単一の xml 要素を作成していることです。

xmlnsc パーサーを使用するように入力ノードのプロパティを変更することをお勧めします。

または、CreateElementAsLastChildFromBitstream() を使用して blob を解析するように Java を更新する必要があります。

ここに例があります:

http://publib.boulder.ibm.com/infocenter/wmbhelp/v8r0m0/topic/com.ibm.etools.mft.doc/ac30350_.htm

于 2013-03-14T13:06:29.917 に答える
-1

私はJavaではうまくいきませんが、シンボルがhtmlエンティティの値で変換されていることを観察しました。このリンクhttp://www.w3schools.com/tags/ref_entities.aspを参照してください。すべてのエンティティを取得できます。

反対票を投じないでください。私の知る限り、私が観察したことを彼に手伝ってもらいます。

于 2013-03-13T18:45:13.363 に答える