将xml传入文件转换为文本

时间:2013-03-13 18:35:52

标签: java xml xml-parsing websphere messagebroker

我通过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输出文件:   enter image description here

喜欢它没有识别任何utf-8字符,如:引用&lt; &gt; 等...所以我认为将传入的文件转换为文本将解决问题。但我不知道该怎么做,或者它是否是最好的解决方案。

你对此有任何想法吗?谢谢:))

编辑:邮件不应该被转义,应该转换并编码到输出中。

4 个答案:

答案 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,您可以获取所有实体。

不要投票,我只是按照我的知识帮助他。