相关疑难解决方法(0)

XSLT在后代节点上拆分树

我正在尝试根据后代元素的位置拆分元素树.(特别是,我正在尝试解析Adobe的IDML.)我希望能够转换一个看起来像这样的树:

<ParagraphStyleRange style="foo">
 <CharacterStyleRange style="bar">
  <Content>foo</Content>
  <Br />
  <Content>bar</Content>
 </CharacterStyleRange>
 <CharacterStyleRange style="bop">
  <Content>baz</Content>
  <Br />
  <Hyperlink>
   <Content>boo</Content>
    <Br />
   <Content>meep</Content>
  </Hyperlink>
</ParagraphStyleRange>
Run Code Online (Sandbox Code Playgroud)

分裂树木:

<ParagraphStyleRange style="foo">
 <CharacterStyleRange style="bar">
  <Content>foo</Content>
 </CharacterStyleRange>
</ParagraphStyleRange>

<ParagraphStyleRange style="foo">
 <CharacterStyleRange style="bar">
  <Content>bar</Content>
 </CharacterStyleRange>
 <CharacterStyleRange style="bop">
  <Content>baz</Content>
 </CharacterStyleRange>
</ParagraphStyleRange>

<ParagraphStyleRange style="foo">
 <CharacterStyleRange style="bop">
  <Hyperlink>
   <Content>boo</Content>
  </Hyperlink>
 </CharacterStyleRange>
</ParagraphStyleRange>

<ParagraphStyleRange style="foo">
 <CharacterStyleRange style="bop">
  <Hyperlink>
   <Content>meep</Content>
  </Hyperlink>
 </CharacterStyleRange>
</ParagraphStyleRange>
Run Code Online (Sandbox Code Playgroud)

然后我可以使用普通的XSL解析.(编辑:我最初<Br/>在原始位置显示标签,但是它们是否存在并不重要,因为它们包含的信息现在由分裂元素表示.我认为如果没有它们可能更容易解决这个问题担心让他们进入.)

我尝试使用xsl:for-each-groupXSLT 2.0规范(例如<xsl:for-each-group select="CharacterStyleRange/*" group-ending-with="Br">)中的建议,但我无法弄清楚如何在树的每个级别应用它(<Br />标签可以出现在任何级别,例如在<Hyperlink>元素内部的元素内<CharacterStyleRange>,并且它也限制我只有在所选深度应用的模板.

编辑:我的示例代码只显示树需要拆分的一个地方,但可以有任意数量的分割点(但总是相同的元素.)

编辑2:我添加了一些更详细的例子,以显示一些并发症.

xslt

5
推荐指数
1
解决办法
977
查看次数

标签 统计

xslt ×1