Java - 从String中提取XML文档

时间:2011-03-01 13:09:09

标签: java xml parsing

有一个随机字符串,如何从中提取XML文档?

考虑String可能没有(不完整),一个(完整)或多个文档。

是否有解决此问题的模板/工具?

LE:考虑通过TCP / IP检索XML数据的情况

3 个答案:

答案 0 :(得分:2)

多个文档是一个挑战......我将String包装成一个额外的“root”,这至少会将内容转换为有效的xml文档:

 String xml = "<my-own-root-element>" + getString() + "</my-own-root-element>";

刚开始。当然,忘记xml架构和doctype。不同的字符编码可能是一个挑战,您可能必须过滤掉<?xml ... ?>处理说明。

答案 1 :(得分:1)

我知道没有现成的解决方案可以自动处理损坏的XML文档。 XML是一个非常严格的标准,在解析错误时几乎没有余地。你是独立的。

您可以尝试查看XML编辑器的代码;他们必须能够处理腐败的文件,但我怀疑他们中的任何一个都可以处理诸如缺少启动元素之类的事情。

答案 2 :(得分:0)

这是我的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;
    }