Java 解析具有多个标记的文本文件并将其写入另一个文本文件
需要读取一个看起来像XML的文本文件。该文本文件由多个XML文件和一个父标记组成。需要逐行解析该文件,需要写入所需子标记的相应元素,甚至在父标记内重复多次,在一行中,到另一个文本文件。需要将元素写入父标记后的下一行。我知道如何读取文件和写入文件,但我无法根据要求获取读取该文件的逻辑。请帮助我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
<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元素写入另一个文本文件,例如一行中属于父标记的必需子标记值