如何使用拆分或其他函数从具有 xml 标签的文本文件中提取信息
how to use split or other function for extracting information from text file having xml tags
您好,我确实有包含这种形式数据的平面文本文件
<PersonName> Ian </PersonName> <OrgName> Cum Sociis Natoque Limited</OrgName>
<PersonName> Camilla </PersonName> <OrgName> Lorem Corporation </OrgName>
<PersonName> Addison </PersonName> <OrgName> Tempus Corp. </OrgName>
<PersonName> Arsenio </PersonName> <OrgName> Id LLP </OrgName>
我想要这样的最终结果:
Ian: PersonName
Cum Sociis Natoque Limited: OrgName
Camilla: PersonName
.... so on
有没有人有什么见解
假设您的文件确实是纯文本文件而不是XML
文件,您可以使用正则表达式提取XML
标签之间的文本内容,如下:
Pattern pattern = Pattern.compile("<([^>]+)>([^<]*)</[^>]+>");
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
System.out.printf("%s: %s ", matcher.group(2).trim(), matcher.group(1));
}
System.out.println();
}
}
输出:
<PersonName> Ian </PersonName> <OrgName> Cum Sociis Natoque Limited</OrgName>
Ian: PersonName Cum Sociis Natoque Limited: OrgName
<PersonName> Camilla </PersonName> <OrgName> Lorem Corporation </OrgName>
Camilla: PersonName Lorem Corporation: OrgName
<PersonName> Addison </PersonName> <OrgName> Tempus Corp. </OrgName>
Addison: PersonName Tempus Corp.: OrgName
<PersonName> Arsenio </PersonName> <OrgName> Id LLP </OrgName>
Arsenio: PersonName Id LLP: OrgName
在java8中,它将是:
Pattern pattern = Pattern.compile("<([^>]+)>([^<]*)</[^>]+>");
try (Stream<String> stream = Files.lines(Paths.get(filePath))) {
stream.forEach(
line -> {
System.out.println(line);
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
System.out.printf("%s: %s ", matcher.group(2).trim(), matcher.group(1));
}
System.out.println();
}
);
}
在每行上使用拆分:
String[] parts = line.replaceAll("^.*?>", "").split("<.*?>");
这将是一个包含您想要的内容的大小为 2 的数组。
您好,我确实有包含这种形式数据的平面文本文件
<PersonName> Ian </PersonName> <OrgName> Cum Sociis Natoque Limited</OrgName>
<PersonName> Camilla </PersonName> <OrgName> Lorem Corporation </OrgName>
<PersonName> Addison </PersonName> <OrgName> Tempus Corp. </OrgName>
<PersonName> Arsenio </PersonName> <OrgName> Id LLP </OrgName>
我想要这样的最终结果:
Ian: PersonName
Cum Sociis Natoque Limited: OrgName
Camilla: PersonName
.... so on
有没有人有什么见解
假设您的文件确实是纯文本文件而不是XML
文件,您可以使用正则表达式提取XML
标签之间的文本内容,如下:
Pattern pattern = Pattern.compile("<([^>]+)>([^<]*)</[^>]+>");
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
System.out.printf("%s: %s ", matcher.group(2).trim(), matcher.group(1));
}
System.out.println();
}
}
输出:
<PersonName> Ian </PersonName> <OrgName> Cum Sociis Natoque Limited</OrgName>
Ian: PersonName Cum Sociis Natoque Limited: OrgName
<PersonName> Camilla </PersonName> <OrgName> Lorem Corporation </OrgName>
Camilla: PersonName Lorem Corporation: OrgName
<PersonName> Addison </PersonName> <OrgName> Tempus Corp. </OrgName>
Addison: PersonName Tempus Corp.: OrgName
<PersonName> Arsenio </PersonName> <OrgName> Id LLP </OrgName>
Arsenio: PersonName Id LLP: OrgName
在java8中,它将是:
Pattern pattern = Pattern.compile("<([^>]+)>([^<]*)</[^>]+>");
try (Stream<String> stream = Files.lines(Paths.get(filePath))) {
stream.forEach(
line -> {
System.out.println(line);
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
System.out.printf("%s: %s ", matcher.group(2).trim(), matcher.group(1));
}
System.out.println();
}
);
}
在每行上使用拆分:
String[] parts = line.replaceAll("^.*?>", "").split("<.*?>");
这将是一个包含您想要的内容的大小为 2 的数组。