如何使用拆分或其他函数从具有 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 的数组。