在没有 DOM 的情况下过滤内存中的 XML 节点?

Posted

技术标签:

【中文标题】在没有 DOM 的情况下过滤内存中的 XML 节点?【英文标题】:Filtering XML nodes in memory without DOM? 【发布时间】:2011-12-27 10:12:12 【问题描述】:

给定一个很大的 XML,我希望在内存中的树中拥有部分 XML 结构(这不是 DOM !!) 例如给定

<MAIN>
    <A>
        <B>1</B>
        <C>2</C>
        <D>3</D>
            <H>7</H>
            <I>9</I>
        <E>2</D>
    </A>
    <A>
        <B>4</B>
        <C>5</C>
        <D>6</D>
            <H>3</H>
            <I>0</I>
        <E>3</D>
    </A>
</MAIN>

用户选择节点B和H后,我想在内存中拥有

<MAIN>
    <A>
        <B>1</B>
        <C>2</C>
        <D>3</D>
            <H>7</H>
    </A>
    <A>
        <B>4</B>
        <C>5</C>
        <D>6</D>
            <H>3</H>
    </A>
</MAIN>

有时用户想按节点内容过滤,比如所有大于3的B节点等

是否有(SAX?)库来做这样的事情? 最好在 Smalltalk 中,但任何其他语言都可以。

【问题讨论】:

【参考方案1】:

VisualWorks 中包含一个 SAX 库。

【讨论】:

该 SAX 库是否支持构建 DOM 子树并对其进行编辑?【参考方案2】:

在 Java 领域,使用 JDOM 或 DOM4J(可能还有 XOM),您可以编写自定义构建器来实现您想要的。

DOM4J 的示例

【讨论】:

【参考方案3】:

STX 处理器允许以流方式处理大型文档,但在variables 或buffers 中保留(可能已转换)该文档的部分。

【讨论】:

以上是关于在没有 DOM 的情况下过滤内存中的 XML 节点?的主要内容,如果未能解决你的问题,请参考以下文章

在 WPF 中,您可以在没有代码的情况下过滤 CollectionViewSource 吗?

我应该如何在不破坏嵌套的情况下过滤 RECORD 中的列?

如何在不使用 Group By / 有函数的情况下过滤 SQL 中的数据

如何在不使用 Perl 循环的情况下过滤数组?

在不更改数据源的情况下过滤 DataGridView

在不使用保护子句的情况下过滤 erlang ets 表