【问题标题】:Parsing a text file with multiple tags and writing it to another text file解析具有多个标签的文本文件并将其写入另一个文本文件
【发布时间】:2014-03-27 17:05:24
【问题描述】:

需要读取一个看起来像XML的文本文件。该文本文件由多个XML文件组成,带有一个父标签。需要逐行解析文件,并需要编写所需子标签的相应元素甚至在父标签内重复多次,在一行中,到另一个文本文件。需要将元素写入父标签之后的下一行。我知道如何读取文件和写入文件,但我无法根据要求获取逻辑来阅读它。请帮帮我。

    <parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping" fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd">
<Child1 Child1Scheme="http://www.google.com">1234566546</Child1>
<Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-23243423</Child1>
<country countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country>
<state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">23423423423</state>
</parentnode>

<parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping" fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd">
<Child1 Child1Scheme="http://www.google.com">1234566546</Child1>
<Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-154555</Child1>
<country countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country>
<state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">434343242</state>
</parentnode>

<parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping" fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd">
<Child1 Child1Scheme="http://www.google.com">1234566546</Child1>
<Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-4566545</Child1>
<country countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country>
<state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">2323232323</state>
</parentnode>

【问题讨论】:

  • 你需要在这里做很多事情。最好开始!向我们展示您的一些 xml 文件或集合。
  • 如果您发布示例输入文件然后发布您期望的输出会更好。我无法理解 OP 中的任何内容。
  • StAX 可能会帮助您解析文件,但我不确定当文件中有多个根元素时它的行为如何......
  • @hellboy 文件已附加,请帮助我
  • @Puce 这不是要解析的 XML,它是包含 XML 格式数据的文本文件。

标签: java xml text-parsing


【解决方案1】:

首先你必须为你的文件做一个有效的xml:

<?xml version="1.0"?>
<rootnode>
    <parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping"
        fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd">
        <Child1 Child1Scheme="http://www.google.com">1234566546</Child1>
        <Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-23243423</Child1>
        <country
            countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country>
        <state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">23423423423</state>
    </parentnode>

    <parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping"
        fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd">
        <Child1 Child1Scheme="http://www.google.com">1234566546</Child1>
        <Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-154555</Child1>
        <country
            countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country>
        <state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">434343242</state>
    </parentnode>

    <parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping"
        fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd">
        <Child1 Child1Scheme="http://www.google.com">1234566546</Child1>
        <Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-4566545</Child1>
        <country
            countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country>
        <state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">2323232323</state>
    </parentnode>
</rootnode>

然后您就可以开始阅读您的文件了,只需检查一下即可。

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ReadXMLFile {

    public static void main(String argv[]) {

        try {
            File fXmlFile = new File("file.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(fXmlFile);

            doc.getDocumentElement().normalize();

            System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

            NodeList nList = doc.getElementsByTagName("parentnode");

            for (int temp = 0; temp < nList.getLength(); temp++) {

                Node nNode = nList.item(temp);

                System.out.println("Current Element :" + nNode.getNodeName());

                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = (Element) nNode;
                    System.out.println("Staff id : " + eElement.getElementsByTagName("Child1").item(0).getTextContent());
                    System.out.println("First Name : " + eElement.getElementsByTagName("Child1").item(0).getTextContent());
                    System.out.println("Last Name : " + eElement.getElementsByTagName("country").item(0).getTextContent());
                    System.out.println("Nick Name : " + eElement.getElementsByTagName("state").item(0).getTextContent());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

【讨论】:

  • 我真的很感谢你的帮助,你说的是 ib XML 格式是对的,但我问的是文本格式的输入文件,它在一个文本文件中包含许多 XML,它应该是一个文本文件。
  • 你能告诉我更多关于它的信息吗?我认为你没有理由像普通文本文件一样阅读 xml 或 xml 集合。我知道你想逐行阅读,但这不是 xml 的工作方式。
  • 我在一个文本文件中有一个 XML 集合,它是一个正在生成的日志文件。我需要找出一个特定元素重复了多少次特定元素..
  • 就这样?你需要计算元素标签,仅此而已?还是您也必须计算属性?
  • Mobe : 需要将标签元素写入另一个文本文件,例如需要在一行中属于父标签的子标签值
猜你喜欢
  • 1970-01-01
  • 2018-06-27
  • 2016-08-14
  • 2019-08-20
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多