<division>
<subdiv id="1" type="author">
<emptype value="1"/>
<p>name of author</p>
<p>date</p>
</subdiv>
<subdiv id="2" type="acknowledgement">
<emptype value="2"/>
<h>acknowledgement</h>
<p>some texts</p>
<emptype value="3"/>
<p>more text</p>
</subdiv>
<subdiv id="3" type="chapters">
<emptype value="4"/>
<emptype value="5"/>
<emptype value="6"/>
<h>chapter 1</h>
<p>paragraph 1</p>
<p>paragraph 2</p>
<p>paragraph 3</p>
<emptype value="7"/>
<p>paragraph 4</p>
<emptype value="8"/>
<h>chapter 2</h>
<p>paragraph 1</p>
</subdiv>
</division>
我将此XSLT拆分为每个<subdiv>
节点的单独文件。如果任何<subdiv>
节点包含在第一个<emptype>
节点之前发生的<h>
节点,则应将该<emptype>
节点移动到先前的<subdiv>
节点。< / p>
e.g。
文件1
<division>
<subdiv id="1" type="author">
<emptype value="1"/>
<p>name of author</p>
<p>date</p>
<emptype value="2"/>
</subdiv>
</division>
file2的
<division>
<subdiv id="2" type="acknowledgement">
<h>acknowledgement</h>
<p>some texts</p>
<emptype value="3"/>
<p>more text</p>
<emptype value="4"/>
<emptype value="5"/>
<emptype value="6"/>
</subdiv>
</division>
file3的
<division>
<subdiv id="3" type="chapters">
<h>chapter 1</h>
<p>paragraph 1</p>
<p>paragraph 2</p>
<p>paragraph 3</p>
<emptype value="7"/>
<p>paragraph 4</p>
<emptype value="8"/>
<h>chapter 2</h>
<p>paragraph 1</p>
</subdiv>
</division>
我能够将XML拆分为单独的文件,但无法将<emptype>
节点移动到正确的位置。我将不胜感激任何帮助。
注意 :我只查找XPath表达式,以选择<emptype>
内但{1}之前的<subdiv>
个节点发生<h>
。
答案 0 :(得分:0)
如果您要查找的是XPath表达式,则以下内容应该有效:
<xsl:copy-of select="subdiv/emptype[count(preceding-sibling::h) = 0 and count(../h) > 0]" />
仅当<emptype>
节点没有任何名为<h>
的兄弟姐妹,并且至少有一个名为<h>
的兄弟节点时,才会复制<emptype value="1">
节点。 (第二个条件允许复制{{1}},这似乎是您想要的。)
答案 1 :(得分:0)
您是否希望从下一个细分中获取空白?
假设subdiv是您当前的上下文节点:
following-sibling::subdiv[1]/emptype[not(preceding-sibling::h)]
这没有考虑如何处理最终的细分。我会使用xsl:if对last()进行测试,而不是试图让XPath变得混乱。