Java生成的XML在.NET/SQL中出现特殊字符

4
我们有一个使用JAXB生成XML文件的Java桌面应用程序,然后由.NET应用程序读取并存储在SQL Server数据库中。
我们发现Java中的换行符没有转换为.NET/SQL中的回车符/换行符。
有没有办法告诉Java或JAXB同时包含回车符和换行符?有没有办法让.NET将它们放进去?CDATA块是否有帮助?
谢谢。
4个回答

1
你是如何创建XML文件的?数据是否通过PrintStream传递?如果是这样,那么可能是系统相关的换行符被引入的时候。
问题出现在哪些换行符上?在文本元素内部还是在XML标签之间?如果是前者,那么你应该关注构建文本的代码;如果是后者,那么就是XML生成库的问题。

所以我们有一个Java/Swing用户界面(文本框),它使用jgoodies框架绑定对象。我们使用Jaxb将对象“保存”到XML文件中。然后使用xsd将XML文件导入到.net中,形成一组对象。这些对象又手动持久化到SQL数据库中。据我所知,在任何时候都没有使用PrintStream。 - matt eisenberg

0

您可以通过让JAXB不添加缩进来解决这个问题:

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);  // DEFAULT

如果您正在使用JAXB类保存XML,则它会自动格式化文档。要删除格式,请不要执行以下操作,只需使用上述方法即可:
JAXB.marshal(object, System.out);

您也可以尝试另一个JAXB实现。我领导MOXy JAXB实现。当我们的实现格式化文档时,使用以下内容

System.getProperty("line.separator");

我们尝试过这个方法,但没有帮助。还有其他的想法吗?现在对于我们来说使用MOXy JAXB已经太晚了。谢谢。 - matt eisenberg
1
特殊字符是与内容还是格式相关的?如果它们与用户提供的内容有关,则需要自己进行转换;如果它们与格式相关且您未启用(或禁用)此JAXB功能,则其他某个阶段提供了格式。 - bdoughan
它们与用户提供的内容有关。 - matt eisenberg

0
事实上,Blaise Doughan 给出的回复相当不错(可能是个打字错误?)。
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  // Blaise wrote 'false' here

对我来说,它保留了换行符...


0

我们最终在 .net 方面解决了这些问题。

我们通过一个函数将每个字符串传递,该函数使用 vblf 替换 vbcrlf。目前看起来效果不错。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接