我有各种书籍作为xml文件,其中包括嵌套的div元素,这些元素包含各个级别的记录标题和记录ID信息-部分/章节/文章记录/诗歌等。
我需要输出一个目录结构,该目录结构由对原始结构中每个div的子div标题信息进行分组的部分组成。但是,如果这些子div元素中的任何一个具有自己的(大)子div元素,则它们需要在输出中填充新的section元素。
并发症是:
1)每个项目(即div / title)都需要以原始读取顺序显示(它们在xml中显示的顺序与div级别无关)
2)项目只能出现一次(即,标头中使用的div信息也不能作为另一节的子项包含在内)
3)每本书可以具有不同深度的嵌套div元素(最多8个级别)
如果将父标题用作上一个section元素的标题,则不需要输出中的header元素。部分可能没有孩子。
输入xml的简化版本如下所示:
<div0>
<div1>
<title>Intro</title><id>A1</id>
</div1>
<div1>
<title>Volume</title><id>A2</id>
<div2>
<title>Preface</title><id>A3</id>
</div2>
<div2>
<title>Dedication</title><id>A4</id>
</div2>
<div2>
<title>Part 1</title><id>A5</id>
<div3>
<title>Chapter 1</title><id>A6</id>
</div3>
<div3>
<title>Chapter 2</title><id>A7</id>
</div3>
<div3>
<title>Chapter 3</title><id>A8</id>
</div3>
<div3>
<title>Chapter 4</title><id>A9</id>
<div4>
<title>Poem 1</title><id>A10</id>
</div4>
<div4>
<title>Poem 2</title><id>A11</id>
</div4>
</div3>
<div3>
<title>Chapter 5</title><id>A12</id>
</div3>
<div3>
<title>Chapter 6</title><id>A13</id>
</div3>
</div2>
<div2>
<title>Part 2</title><id>A14</id>
<div3>
<title>Chapter 7</title><id>A15</id>
</div3>
<div3>
<title>Chapter 8</title><id>A16</id>
<div4>
<title>Illustration 1</title><id>A17</id>
</div4>
<div4>
<title>Illustration 2</title><id>A18</id>
</div4>
<div4>
<title>Illustration 3</title><id>A19</id>
</div4>
</div3>
<div3>
<title>Chapter 9</title><id>A20</id>
</div3>
<div3>
<title>Chapter 10</title><id>A21</id>
</div3>
</div2>
<div2>
<title>Back Matter</title><id>A22</id>
</div2>
</div1>
</div0>
我希望得到的输出是:
<toc>
<section id="1">
<level>1</level>
<order>1</order>
<header>Intro</header>
<link>A1</link>
</section>
<section id="2">
<level>1</level>
<order>2</order>
<header>Volume</header>
<link>A2</link>
<child>
<name>Preface</name>
<link>A3</link>
</child>
<child>
<name>Dedication</name>
<link>A4</link>
</child>
</section>
<section id="3">
<level>2</level>
<parentSectionID>2</parentSectionID>
<order>3</order>
<header>Part 1</header>
<link>A5</link>
<child>
<name>Chapter 1</name>
<link>A6</link>
</child>
<child>
<name>Chapter 2</name>
<link>A7</link>
</child>
<child>
<name>Chapter 3</name>
<link>A8</link>
</child>
</section>
<section id="4">
<level>3</level>
<parentSectionID>3</parentSectionID>
<order>4</order>
<header>Chapter 4</header>
<link>A9</link>
<child>
<name>Poem 1</name>
<link>A10</link>
</child>
<child>
<name>Poem 2</name>
<link>A11</link>
</child>
</section>
<section id="5">
<level>2</level>
<parentSectionID>3</parentSectionID>
<order>5</order>
<child>
<name>Chapter 5</name>
<link>A12</link>
</child>
<child>
<name>Chapter 6</name>
<link>A13</link>
</child>
</section>
<section id="6">
<level>2</level>
<parentSectionID>2</parentSectionID>
<order>6</order>
<header>Part 2</header>
<link>A14</link>
<child>
<name>Chapter 7</name>
<link>A15</link>
</child>
</section>
<section id="7">
<level>3</level>
<parentSectionID>6</parentSectionID>
<order>7</order>
<header>Chapter 8</header>
<link>A16</link>
<child>
<name>Illustration 1</name>
<link>A17</link>
</child>
<child>
<name>Illustration 2</name>
<link>A18</link>
</child>
<child>
<name>Illustration 3</name>
<link>A19</link>
</child>
</section>
<section id="8">
<level>2</level>
<parentSectionID>2</parentSectionID>
<order>8</order>
<child>
<name>Chapter 9</name>
<link>A20</link>
</child>
<child>
<name>Chapter 10</name>
<link>A21</link>
</child>
</section>
<section id="9">
<level>2</level>
<parentSectionID>2</parentSectionID>
<order>9</order>
<header>Back Matter</header>
<link>A22</link>
</section>
</toc>
我可以确定如何找到所有div级别(使用starts-with(local-name(),'div')并检查每个div子级和div孙子级,但是我无法确定如何分组将它们分成多个部分,当发现一个子div具有自己的子div时,该部分会分成新的部分,然后在没有孙子div的情况下返回到下一个子div的上一级。要么我在for-each循环中丢失了读取顺序否则我最终会在输出中出现重复。
如果有人可以提供将标题分组到各个部分的解决方案,假设我能理解方法,那么我自己就能算出如何填充各个部分的ID,级别信息等。