Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析具有多个标记的文本文件并将其写入另一个文本文件_Java_Xml_Text Parsing - Fatal编程技术网

Java 解析具有多个标记的文本文件并将其写入另一个文本文件

Java 解析具有多个标记的文本文件并将其写入另一个文本文件,java,xml,text-parsing,Java,Xml,Text Parsing,需要读取一个看起来像XML的文本文件。该文本文件由多个XML文件和一个父标记组成。需要逐行解析该文件,需要写入所需子标记的相应元素,甚至在父标记内重复多次,在一行中,到另一个文本文件。需要将元素写入父标记后的下一行。我知道如何读取文件和写入文件,但我无法根据要求获取读取该文件的逻辑。请帮助我 <parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping" fpmlVersion="5-5" xmlns:abcde="http

需要读取一个看起来像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>

1234566546
AbcdeXYZ-23243423
1030253498
23423423423
1234566546
AbcdeXYZ-154555
1030253498
434343242
1234566546
AbcdeXYZ-4566545
1030253498
2323232323

首先,您必须为文件创建有效的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>

1234566546
AbcdeXYZ-23243423
1030253498
23423423423
1234566546
AbcdeXYZ-154555
1030253498
434343242
1234566546
AbcdeXYZ-4566545
1030253498
2323232323
然后你就可以开始阅读你的文件了,只要把它签出来就行了

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();
        }
    }
}
导入java.io.File;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
导入org.w3c.dom.Node;
导入org.w3c.dom.NodeList;
公共类ReadXMLFile{
公共静态void main(字符串argv[]){
试一试{
File fXmlFile=新文件(“File.xml”);
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
documentdoc=dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
System.out.println(“根元素:+doc.getDocumentElement().getNodeName());
NodeList nList=doc.getElementsByTagName(“父节点”);
对于(int-temp=0;temp
在这里你需要做很多事情。最好开始吧!向我们展示一些您的xml文件或集合。如果您发布一个示例输入文件,然后发布您期望的输出,这会更好。我无法理解OP.StAX中的任何内容可能有助于您解析该文件,尽管我不确定当您的文件中有多个根元素时它的行为…@hellboy文件已附加,请帮助me@Puce这不是XML,而是包含XML格式数据的文本文件。非常感谢您的帮助,你说的是正确的ib XML格式,但我想问的是文本格式的输入文件,它由许多XML一起组成一个文本文件,它应该是一个文本文件。你能告诉我更多关于它的信息吗?我看不出有什么理由像读取普通文本文件一样读取xml或xml集合。我知道你想逐行阅读,但xml不是这样工作的。我在一个文本文件中有一个xml集合,它是一个正在生成的日志文件。我需要找出一个特定元素,该元素重复了多少次。就是这样吗?你需要计算元素标签,就这些?或者您也必须计算属性吗?Mobe:需要将tag元素写入另一个文本文件,例如一行中属于父标记的必需子标记值