这个问题是指我们无法找到的算法。问题如下:
我们有一个包含深度对齐结构的 XML(具体来说是一个包含 content.xml 的 ODT 文件):
<root xmlns:text="someuri">
<header>
...
</header>
<body>
<text:span dns:att01="value">
some text
</text:span>
<text:span dns:att02="value">
more text
<text:span dns:att03="value">
even nested structures
</text:span>
</text:span>
</body>
</root>
请注意,这是一个仅包含必要细节的简化示例。如您所见,这看起来像一个“普通”xml 结构,其根包含一些文本和跨度节点。对于我们的应用程序,我们需要做一些处理。由于所有跨度节点都包含其他节点,形成树状结构,因此需要转换目标格式以使文本节点广度对齐。这是所需的格式:
<root xmlns:text="someuri">
<header>
...
</header>
<body>
<text:marker-begin text:name="01" />
some text
<text:marker-end text:name="01" />
<text:marker text:name="01" />
<text:marker-begin text:name="02" />
more text
<text:marker-begin text:name="03" />
even nested structures
<text:marker-end text:name="03" />
<text:marker text:name="03" />
<text:marker-end text:name="02" />
<text:marker text:name="02" />
</body>
</root>
不要让缩进激怒你,所有的文本节点都可能有一个直接的父节点,除了正文节点。标记用于触发第三方软件的某个功能。所需的文本注释现在被暗示标记机制的空元素包围。现在,经过一些冗长的准备,问题本身:
如何使用通过 java 提供的默认 DOM 机制将结构一转换为结构二。这甚至可能吗?您是否愿意建议一种 SAX 方法来收集跨度节点的开始和结束元素?这个问题是否已经存在算法?由于必须在过程中完成的副处理链,XLST 是不可能的。