Java 将xml传入文件转换为文本

Java 将xml传入文件转换为文本,java,xml,xml-parsing,websphere,messagebroker,Java,Xml,Xml Parsing,Websphere,Messagebroker,我通过WebSphereMessageBroker接收一个XML文件,但当我用Java处理它时,它在输出中给我一个非格式化文件 XML输入文件: XML输出文件: 好像它不识别任何utf-8字符,如:引号或等。。。因此,我认为将传入文件转换为文本将解决这个问题。但我不知道怎么做,也不知道这是不是最好的解决方案 你知道这件事吗?谢谢:) 编辑:消息不应该只是转义,它应该被转换并很好地编码到输出中 im在java中不太好,但我观察到符号是用html实体值转换的。查看此链接,您可以获得所有实体 不要

我通过WebSphereMessageBroker接收一个XML文件,但当我用Java处理它时,它在输出中给我一个非格式化文件

XML输入文件:

XML输出文件:

好像它不识别任何utf-8字符,如:引号等。。。因此,我认为将传入文件转换为文本将解决这个问题。但我不知道怎么做,也不知道这是不是最好的解决方案

你知道这件事吗?谢谢:)


编辑:消息不应该只是转义,它应该被转换并很好地编码到输出中

im在java中不太好,但我观察到符号是用html实体值转换的。查看此链接,您可以获得所有实体


不要投反对票,我只是根据我所了解的情况帮助他。

这里的问题是,您正在创建一个xml元素,其值是作为blob的整个输入消息

您最好修改输入节点属性以使用xmlnsc解析器

或者,您需要更新java以使用CreateElementAsLastChildFromBitstream()解析blob

这里有一个例子:


嗯,我找到了解决办法。我必须在HTTP输入节点中选择XMLNSC解析器,而不是默认的BLOB解析器,并且我必须更改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);

谢谢大家:)

实际上,您甚至可以将其简化一点,这里有一个方法Mbelement.getValueAsString(),它使您不必使用强制转换到字节数组和字符串构造函数

比如你的

MbElement valueEl=xmlnsc.createElementAsFirstChild(MbElement.TYPE_值,“VALUE”,新字符串((字节[])message.getRootElement().getFirstElementByPath(“xmlnsc/article/titre”).getValue())

变成:


MbElement valueEl=xmlnsc.createElementAsFirstChild(MbElement.TYPE_值,“VALUE”,message.getRootElement().getFirstElementByPath(“xmlnsc/article/titre”).getValueAsString())

谢谢。是的,我确信我能得到所有的实体并理解它们。但我需要的是将它们转换成一个输出和正确的XML消息。看这篇文章,你得到了你的答案。如果我的帖子对你来说已满,你可以勾选答案吗。别担心,如果有用的话,我会的:),这是关于解析而不是转义的
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);
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);