我通过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 compute(用于处理消息):
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字符,如:引用或&lt; 和&gt; 等...所以我认为将传入的文件转换为文本将解决问题。但我不知道该怎么做,或者它是否是最好的解决方案。
你对此有任何想法吗?谢谢:))
编辑:邮件不应该被转义,应该转换并编码到输出中。
答案 0 :(得分:1)
好吧,我找到了解决方案。我必须在 HTTP输入节点中选择 XMLNSC Parser ,而不是默认的BLOB Parser,我必须更改 Java Compute 代码:
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);
谢谢你们:)
答案 1 :(得分:0)
这里的问题是你要创建一个单独的xml元素,其值是整个输入消息的blob。
您最好的选择是修改输入节点属性以使用xmlnsc解析器。
或者你需要更新你的java来使用CreateElementAsLastChildFromBitstream()
来解析blob这里有一个例子:
http://publib.boulder.ibm.com/infocenter/wmbhelp/v8r0m0/topic/com.ibm.etools.mft.doc/ac30350_.htm
答案 2 :(得分: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());
答案 3 :(得分:-1)
我在java中表现不佳,但我观察到该符号是用html实体值转换的,请参阅此链接http://www.w3schools.com/tags/ref_entities.asp,您可以获取所有实体。
不要投票,我只是按照我的知识帮助他。