在java中将元素添加到xml文件中,而不将其加载到内存中

14ifxucb  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(266)

我有一个应用程序,它生成包含元素列表的非常繁重的xml文件,我必须分几个步骤向其中添加元素,并将它们保存在硬盘上。例如,在第一次迭代中,将生成完整的文件:

<File>
    <Header>
        <Date>yyyy-MM-dd</Date>
        <Uuid>335773a6-1ee3-4ef8-95dd-65abed4226b4 </Uuid>
        <!-- Other params -->
    </Header>
    <Body>
    <!-- Other params -->
    <Users>
        <User>
            <Id>1</Id>
            <Name>John</Name>
            <Surname>Doe</Surname>
            <Mail>john@mail.com</Mail>
            <!-- Other params -->
        </User>
        <User>
            <Id>2</Id>
            <Name>John</Name>
            <Surname>Doe</Surname>
            <Mail>john@mail.com</Mail>
            <!-- Other params -->
        </User>
        <!-- Add more items here-->

    </Users>    
    </Body>
</File>

在下面的迭代中,添加了更多的元素(在本例中,只增加了两个用户):

<File>
    <Header>
        <Date>yyyy-MM-dd</Date>
        <Uuid>335773a6-1ee3-4ef8-95dd-65abed4226b4 </Uuid>
        <!-- Other params -->
    </Header>
    <Body>
    <!-- Other params -->
    <Users>
        <User>
            <Id>1</Id>
            <Name>John</Name>
            <Surname>Doe</Surname>
            <Mail>john@mail.com</Mail>
            <!-- Other params -->
        </User>
        <User>
            <Id>2</Id>
            <Name>John</Name>
            <Surname>Doe</Surname>
            <Mail>john@mail.com</Mail>
            <!-- Other params -->
        </User>
        <User>
            <Id>3</Id>
            <Name>John</Name>
            <Surname>Doe</Surname>
            <Mail>john@mail.com</Mail>
            <!-- Other params -->
        </User>
        <User>
            <Id>4</Id>
            <Name>John</Name>
            <Surname>Doe</Surname>
            <Mail>john@mail.com</Mail>
            <!-- Other params -->
        </User>     
        <!-- Add more items here-->

    </Users>    
    </Body>
</File>

由于文件可能很长,我想避免内存问题,我可以添加新的元素在正确的位置没有完全加载到内存文件?

i86rm4rw

i86rm4rw1#

一种解决方案是将文档维护为两个文件:大纲文件

<File>
    <Header>
        <Date>yyyy-MM-dd</Date>
        <Uuid>335773a6-1ee3-4ef8-95dd-65abed4226b4 </Uuid>
        <!-- Other params -->
    </Header>
    <Body>
      <!-- Other params -->
      <Users>
         &users;
      </Users>
    </Body>
</File>

和有效载荷文件:

<User>
    <Id>1</Id>
    <Name>John</Name>
    <Surname>Doe</Surname>
    <Mail>john@mail.com</Mail>
    <!-- Other params -->
</User>
<User>
    <Id>2</Id>
    <Name>John</Name>
    <Surname>Doe</Surname>
    <Mail>john@mail.com</Mail>
    <!-- Other params -->
</User>

然后可以简单地附加到负载文件。大纲文件需要声明实体引用 &users; 在它的dtd里。每当您使用一致的xml解析器读取大纲文件时,有效负载文件将自动拉入。
这在javascript等不支持xml外部实体的环境中不起作用。有些站点还具有安全设置,以防止使用外部实体。

um6iljoc

um6iljoc2#

您可能正在寻找xml流api。

相关问题