Java 如何从纯文本文件中提取嵌入的XML内容?

Java 如何从纯文本文件中提取嵌入的XML内容?,java,xml,Java,Xml,我有一个巨大的文本文件,我想写一个程序,它只能从文件中提取XML并保存它 有没有比拆分/修剪从文件读取的字符串更好的直接API或解决方案 例如: 文件的一小部分: #---------- #1 : ----------# <MSG_INFO> <message type="TextMessage" messageSelector="" originationTimestamp="" receiveTime="" jmsServerTimestamp="" jmsMsgExpi

我有一个巨大的文本文件,我想写一个程序,它只能从文件中提取XML并保存它

有没有比拆分/修剪从文件读取的字符串更好的直接API或解决方案

例如: 文件的一小部分:

#---------- #1 :  ----------#
<MSG_INFO>
<message type="TextMessage" messageSelector="" originationTimestamp="" receiveTime="" jmsServerTimestamp="" jmsMsgExpiration="">
    <header JMSDestinationType="Generic" JMSDeliveryMode="2" />
    <properties>
        <property name="messageTopic" type="String">xyz</property>
    </properties>
</message>
#------------------1:----------#
xyz

BodyLength=1476
马修·甘巴德拉
XML开发人员指南
电脑类
44.95
2000-10-01
深入了解如何创建应用程序
使用XML。
拉尔斯,金
夜雨
幻想
5.95
2000-12-16
一位前建筑师与企业僵尸搏斗,
一个邪恶的女巫,和她自己的童年成为女王
世界的一部分。

请考虑查看以下Java XML解析方法:


一般来说,XML文件是文本文件,因此要么有一个XML文件,要么有一个包含多个XML片段的文件

如果是前者,则需要学习XML处理(SAX、DOM等)以获取XML文档的结构化内容,然后可以使用其结构保存该内容。这在想要重新格式化XML文档时非常有用(例如,在嵌套标记中使用制表符或将所有内容放在一行上)

如果是后者,则需要编写解析器,然后使用XML处理工具。第一个解析器将查找任何看起来是打开的XML标记的内容,然后跟踪标记在文本文件中的位置,计算随后的打开和关闭标记,直到它检测到它离开了初始标记的顶层嵌套。然后它需要将嵌入的文本块(不传递文档的其余部分)传递给相应的XML解析工具,该工具随后可能会形成XML的代表性视图,然后可能会将其重新处理回文本以保存在它自己的文件中


当然,后者可以优化为在检测到XML的开始和结束边界后不实际解析XML;但是,如果不实际解析XML,就无法保证生成的文本块实际上是有效的XML。

正则表达式就是答案

String[] newXml = xml.split("\\<\\?");
    ArrayList<String> xmlList = new ArrayList<>(Arrays.asList(newXml));
    for(int i = 0; i<xmlList.size();i++){
        if(!xmlList.get(i).contains("xml version=\"1.0\" encoding=\"UTF-8\"")){
            xmlList.remove(i);
        }

    }
    for(int j = 0;j<xmlList.size();j++){
        xmlList.set(j, "<?"+xmlList.get(j));
        xmlList.set(j,xmlList.get(j).split("\\#")[0]);
    }


    return xmlList;

String[]newXml=xml.split(“\\n我不明白。你是说你有一个包含嵌入xml“片段”的文本文件吗?Java有多种API可用于解析(格式良好的)xml。什么是@AndrewThompson说的。你说“只有xml”是什么意思“。你能举个简短的例子吗?用户是否要在你的输入中输入整个xml文件?然后进行CDATA!@Andrew我已经用示例更新了帖子。请看一看。正如你所说,我可以从文本文件解析xml(包含普通文本和xml),你能提供一个例子吗。谢谢有人回答这个问题吗?我从系统收到的文本文件有简单文本和xml。我只需要找到xml并将其提取出来。这些文件中的任何一个能从文本文件(包含xml和普通文本)中提取xml吗?谢谢,顺便说一句,这只给出了文档中的第一个XML。但我们始终可以使用递归技术获取所有XML。这是一种非饥饿模式,用于提取假设文件中的第一个XML,该文件包含XML前后的原始文本。?will没有帮助。您有解决方法吗。
String[] newXml = xml.split("\\<\\?");
    ArrayList<String> xmlList = new ArrayList<>(Arrays.asList(newXml));
    for(int i = 0; i<xmlList.size();i++){
        if(!xmlList.get(i).contains("xml version=\"1.0\" encoding=\"UTF-8\"")){
            xmlList.remove(i);
        }

    }
    for(int j = 0;j<xmlList.size();j++){
        xmlList.set(j, "<?"+xmlList.get(j));
        xmlList.set(j,xmlList.get(j).split("\\#")[0]);
    }


    return xmlList;