繁体   English   中英

Java-从字符串中提取XML文档

[英]Java - extract XML documents from String

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

考虑字符串可能不包含(不完整),一个(完整)或多个文档。

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

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

多个文档是一个挑战...我将把String包装到另一个“根”中,这至少会将内容转换为有效的xml文档:

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

只是一个开始。 当然,请忽略xml模式和doctype。 不同的字符编码可能是一个挑战,您可能必须过滤掉<?xml ... ?>处理说明。

我知道没有现有的解决方案可以自动处理损坏的XML文档。 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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM