有一个随机字符串,如何从中提取XML文档?Java - 从字符串中提取XML文档
请考虑该字符串可能不包含任何(不完整),一个(完整)或多个文档。
是否有解决此问题的模板/工具?
LE:考虑当XML数据通过TCP/IP
有一个随机字符串,如何从中提取XML文档?Java - 从字符串中提取XML文档
请考虑该字符串可能不包含任何(不完整),一个(完整)或多个文档。
是否有解决此问题的模板/工具?
LE:考虑当XML数据通过TCP/IP
检索到的我知道没有现成的解决方案,可自动处理破损的XML文档的情况下。在解析错误时,XML是一个非常严格的标准,它具有很小的余地。你只能靠自己。
您可以尝试的是查看XML编辑器的代码;他们必须能够处理腐败的文件,但我怀疑他们中的任何人都可以处理诸如缺少启动元素等事情。
多个文档是一个挑战......我想换行字符串转换成额外的“根”,这将至少在内容转换为有效的XML文档:
String xml = "<my-own-root-element>" + getString() + "</my-own-root-element>";
只是一个开始。当然,忘记xml架构和文档类型。不同的字符编码可能是一个挑战,您可能需要过滤掉<?xml ... ?>
处理指令。
这是我的C#版本,希望它给出一些方向... 我使用它进行tcp/ip通信, 和T代表一些通用类型。
public List<T> ParseMultipleDocumentsByType<T>(string documents)
{
var cleanParsedDocuments = new List<T>();
var stringContainsDocuments = true;
while (stringContainsDocuments)
{
if(documents.Contains(typeof(T).Name))
{
var startingPoint = documents.IndexOf("<?xml");
var endingString = "</" +typeof(T).Name + ">";
var endingPoing = documents.IndexOf(endingString) + endingString.Length;
var document = documents.Substring(startingPoint, endingPoing - startingPoint);
var singleDoc = (T)XmlDeserializeFromString(document, typeof(T));
cleanParsedDocuments.Add(singleDoc);
documents = documents.Remove(startingPoint, endingPoing - startingPoint);
}
else
{
flag = false;
}
}
return cleanParsedDocuments;
}
public static object XmlDeserializeFromString(string objectData, Type type)
{
var serializer = new XmlSerializer(type);
object result;
using (TextReader reader = new StringReader(objectData))
{
result = serializer.Deserialize(reader);
}
return result;
}
我已经做了类似的事情(添加一个额外的根),然后使用StAX来解析我所希望的是一个有效的XML文档 – Yaneeve 2011-03-01 13:20:53