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