根据标签值的变化将 xml 拆分为更小的一个

<?xml version="1.0" encoding="UTF-16"?>

<ABC>

    <END />

    <Tables>

        <START>

            <row>

                <id>111</id>

                <name>abc</name>

                <deptId>1</deptId>

            </row>

            <row>

                <id>112</id>

                <name>abc1</name>

                <deptId>1</deptId>

            </row>

            <row>

                <id>113</id>

                <name>abc3</name>

                <deptId>1</deptId>

            </row>

            <row>

                <id>222</id>

                <name>def</name>

                <deptId>2</deptId>

            </row>

            <row>

                <id>333</id>

                <name>pqr</name>

                <deptId>2</deptId>

            </row>

            <row>

                <id>444</id>

                <name>xyz</name>

                <deptId>2</deptId>

            </row>

            <row>

                <id>555</id>

                <name>lmn</name>

                <deptId>3</deptId>

            </row>

            <row>

                <id>555</id>

                <name>lmn</name>

                <deptId>3</deptId>

            </row>

        </START>

    </Tables>

</ABC>

我有一个具有上述结构的 xml。我必须根据不同的 .xml 文件将 xml 溢出到 3 个 xml 中deptId。我必须根据标签值的变化将 xml 拆分成更小的一个。我的元素是deptId在某些行之后其值发生了变化。所有相同的元素deptId都在一个序列中。


所需的输出是: 最好将 xml 名称作为部门 ID。


第一个 xml 是 name 1.xml:


<?xml version="1.0" encoding="UTF-16"?>

<ABC>

    <END />

    <Tables>

        <START>

            <row>

                <id>111</id>

                <name>abc</name>

                <deptId>1</deptId>

            </row>

            <row>

                <id>112</id>

                <name>abc1</name>

                <deptId>1</deptId>

            </row>

            <row>

                <id>113</id>

                <name>abc3</name>

                <deptId>1</deptId>

            </row>

        </START>

    </Tables>

</ABC>



回首忆惘然
浏览 127回答 2
2回答

慕仙森

XML 阅读应该<row>大致如下:&nbsp; &nbsp; XMLInputFactory xif = XMLInputFactory.newInstance();&nbsp; &nbsp; // Do not use a Reader, especially not a FileReader. An InputStream leaves the&nbsp; &nbsp; // encoding of the XML to the XMLStreamReader.&nbsp; &nbsp; InputStream in = Files.newInputStream(Paths.get("D:/SmallXmltoSplit.xml"));&nbsp; &nbsp; XMLStreamReader streamReader = xif.createXMLStreamReader(in);&nbsp; &nbsp; streamReader.nextTag();&nbsp; &nbsp; String id = "";&nbsp; &nbsp; String name = "";&nbsp; &nbsp; String deptId = "";&nbsp; &nbsp; String oldDeptId = null;// File file = new File("D:/test" + ".xml");&nbsp; &nbsp; while (streamReader.hasNext()) {&nbsp; &nbsp; &nbsp; &nbsp; if (streamReader.isStartElement()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; switch (streamReader.getLocalName()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case "row":&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id = "";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name = "";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; deptId = "";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case "id":&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id = streamReader.getElementText();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case "name":&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name = streamReader.getElementText();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case "deptId":&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; deptId = streamReader.getElementText();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; if (streamReader.isEndElement()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; switch (streamReader.getLocalName()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case "START":&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (oldDeptId != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; saveDept();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //oldDeptId = deptId;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case "row":&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!deptId.equals(oldDeptId)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (oldDeptId != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; saveDept();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oldDeptId = deptId;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startDept(deptId);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; appendDeptRow(id, name, deptId);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }无需转换即可书写;事实上,它可以作为文本完成。我把它留作练习。不应使用 FileReader 和 FileWriter,因为它们使用默认平台编码对字节进行编码。这个类Files有很多不错的文件函数。这里的另一个特色是 UTF-16 编码,它将几乎是 ASCII 文件的大小加倍。当您提到有一个大文件时,最好将该文件保存在 UTF-8 中,可能即使名称是波斯语、希腊语、日语或保加利亚语。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java