【发布时间】:2014-10-07 12:42:18
【问题描述】:
我搜索并接近找到解决方案,但这需要样式表 2.0,我被困在 1.0 上。
这是我拥有的示例 XML:
<root>
<row>A1: Apples</row>
<row>B1: Red</row>
<row>C1: Reference text</row>
<row>badly formatted text which belongs to row above</row>
<row>and here.</row>
<row>D1: ABC</row>
<row>E1: 123</row>
<row>A1: Oranges</row>
<row>B1: Purple</row>
<row>C1: More References</row>
<row>with no identifier</row>
<row>again and here.</row>
<row>D1: DEF</row>
<row>E1: 456</row>
.
.
我希望它看起来像:
<root>
<row>
<A1>Apples</A1>
<B1>Red</B1>
<C1>Reference text badly formatted text which belongs to row above and here.</C1>
<D1>ABC</D1>
<E1>123</E1>
</row>
<row>
<A1>Oranges</A1>
<B1>Purple</B1>
<C1>More Reference with no identifier again and here.</C1>
<D1>DEF</D1>
<E1>456</E1>
</row>
.
.
有一种模式,我可以使用其他实用程序进行转换,但对于 XSL 1.0 来说非常困难。
我可以使用元素中的标题,并且参考文本字段在转换为 XML 时是多行的,它为每一行创建自己的行,但它始终位于 C1 和 D1 之间的相同位置。元素的实际名称,即不重要。
该行应该在 E1 之后拆分。我认为我的例子很简单,但这种转变不是。我认为自己甚至不是 XML/XSL 的初学者。我从头开始学习,然后我转移到其他项目,然后不得不再次回到它。 TIA。
更新:我遇到的另一个案例结构略有不同,但我希望结果相同:
<root>
<row>
<Field>A1: Apples</Field>
</row>
<row>
<Field>B1: Red</Field>
</row>
<row>
<Field>C1: Reference text</Field>
</row>
<row>
<Field>badly formatted text which belongs to row above</Field>
</row>
<row>
<Field>and here.</Field>
</row>
<row>
<Field>D1: ABC</Field>
</row>
<row>
<Field>E1: 123</Field>
</row>
<row>
<Field>A1: Oranges</Field>
</row>
<row>
<Field>B1: Purple</Field>
</row>
<row>
<Field>C1: More References</Field>
</row>
<row>
<Field>with no identifier</Field>
</row>
<row>
<Field>again and here.</Field>
</row>
<row>
<Field>D1: DEF</Field>
</row>
<row>
<Field>E1: 456</Field>
</row>
我尝试应用身份转换,但似乎不起作用:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match ="row/Field">
<xsl:apply-templates/>
</xsl:template>
【问题讨论】:
-
"有一个模式" 你能更明确地描述这个模式吗?我看到为每 7 行创建一个组 - 但这可能只是示例中的巧合。
-
是的,这是规律,并非巧合。每个记录或组是 7 行。谢谢。
标签: xslt row reformatting