为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

回首忆惘然 2021-10-20 16:25:00
<?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>
查看完整描述

2 回答

?
慕仙森

TA贡献1827条经验 获得超8个赞

XML 阅读应该<row>大致如下:


    XMLInputFactory xif = XMLInputFactory.newInstance();

    // Do not use a Reader, especially not a FileReader. An InputStream leaves the

    // encoding of the XML to the XMLStreamReader.

    InputStream in = Files.newInputStream(Paths.get("D:/SmallXmltoSplit.xml"));

    XMLStreamReader streamReader = xif.createXMLStreamReader(in);

    streamReader.nextTag();


    String id = "";

    String name = "";

    String deptId = "";


    String oldDeptId = null;

// File file = new File("D:/test" + ".xml");


    while (streamReader.hasNext()) {

        if (streamReader.isStartElement()) {

            switch (streamReader.getLocalName()) {

            case "row":

                id = "";

                name = "";

                deptId = "";

                break;

            case "id":

                id = streamReader.getElementText();

                break;

            case "name":

                name = streamReader.getElementText();

                break;

            case "deptId":

                deptId = streamReader.getElementText();

                break;

            }

        }

        if (streamReader.isEndElement()) {

            switch (streamReader.getLocalName()) {

            case "START":

                if (oldDeptId != null) {

                    saveDept();

                    //oldDeptId = deptId;

                }

                break;

            case "row":

                if (!deptId.equals(oldDeptId)) {

                    if (oldDeptId != null) {

                        saveDept();

                        oldDeptId = deptId;

                    }

                    startDept(deptId);

                }

                appendDeptRow(id, name, deptId);

                break;

            }

        }

    }

无需转换即可书写;事实上,它可以作为文本完成。


我把它留作练习。


不应使用 FileReader 和 FileWriter,因为它们使用默认平台编码对字节进行编码。这个类Files有很多不错的文件函数。


这里的另一个特色是 UTF-16 编码,它将几乎是 ASCII 文件的大小加倍。当您提到有一个大文件时,最好将该文件保存在 UTF-8 中,可能即使名称是波斯语、希腊语、日语或保加利亚语。


查看完整回答
反对 回复 2021-10-20
  • 2 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号