问题描述
||
我有一个用Java编写的Web服务。我想以XML文件的形式发送一些字符串。但是这些字符串可能包含一些在XML中被视为非法的字符。目前,我将它们全部替换为?,创建XML并将其通过网络发送到(Silverlight应用)。但是有时候我得到的只是问号!因此,我想以某种方式对这些字符串进行编码/解码,然后再发送它们以获取准确的字符串。这些字符串采用UTF-8编码。我正在使用类似这样的东西来创建XML:
try{
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
//root elements
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement(\"SearchResults\");
rootElement.setAttribute(\"count\",Integer.toString(total));
doc.appendChild(rootElement);
for(int i = 0; i < results.size(); i++)
{
Result res = results.get(i);
//title
Element title = doc.createElement(\"Title\");
title.appendChild(doc.createTextNode(res.title));
searchRes.appendChild(title);
//...
}
//write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
transformer.transform(source,result);
String ret = sw.toString();
return ret;
}
catch(ParserConfigurationException pce){
pce.printstacktrace();
}catch(TransformerException tfe){
tfe.printstacktrace();
}
return null;
谢谢。
PS:
有人说他们不理解我的问题,所以也许我说的不对,所以我尝试用一个例子来澄清它。
假设我有一系列物品。
每个项目有3个字符串。
这些字符串是UTF-8字符串(来自多种语言)。
我想通过Java中的Web服务将这些字符串发送到客户端。
客户端部分是Silverlight。在Silverlight应用中,
我得到XML,对其进行解析,并使用LinQ从中提取数据,然后在Silverlight应用程序中使用该数据。
当我尝试转义字符时,以某种方式,Silverlight中的解析器抛出异常,指出在调试后源字符串(XML字符串)中存在非法字符,我发现实际上存在非法字符,但是我没有\不知道如何产生保证的合法XML字符串。
编辑:
谢谢大家的支持。我真的很感激。
我解决了我的问题。
原来在我的代码中的某个地方,我正在生成一个非法字符并将其附加到我的结果字符串中。
问题仍然存在(即使我向其提供了一些非法字符,我如何也可以产生合法的XML文件-请注意,我通过在产生XML之前消除了非法字符来解决了这一问题,所以我仍然想知道我是否想要某种方式发送过来?),但由于我的问题已经解决,并且这里有很多答案,我想未来的读者将有一个领先的起点,开始着手解决这个问题。
我没有时间,但是我相信这些会有所帮助。
有很多答案和帮助,所以我无法选择其中之一作为我的特定答案。
但是我必须选择其中之一。
我衷心感谢所有答复。
解决方法
如果您要以XML发送非字符数据(例如二进制数据),则可以使用Base64对其进行编码。但是我不确定我是否正确理解了您的问题。
也许您只是忘了使用ѭ1来将您的XML编码为UTF-8。
,不确定我是否理解您的问题,但是也许您应该将数据包装在
CDATA
标记下,以免XML解析器对其进行解析。这是来自MSDN的文档。
,用<![CDATA[
和]]>
包裹内容。
此处提供更多信息:http://www.w3schools.com/xml/xml_cdata.asp
,根据经验,我建议对XML进行转义/转义。
看一下Apache Commons Lang的StringEscapeUtils。
,您应该尝试来自Apache的StringEscapeUtils