使用XSL 1.0,我试图获取两个“Section”元素之间的数据。我可以毫不费力地单独获取“标题”信息,但我也想知道它们之间的区域是什么,因为它们不是兄弟姐妹。这就是我搞砸的地方。
我在网络和这个论坛上搜索了各种解决方案,主要是尝试生成密钥并使用分组,但我没有成功获得任何有效的东西。有时它是“空白预期”错误或根本没有。
INPUT:
<Root>
<Content>
<Paragraph Type="New Section">
<Text>Section A</Text>
</Paragraph>
<Paragraph Type="Stuff">
<Text>Random information 1</Text>
</Paragraph>
<Paragraph Type="Heading">
<Text>Important information 1</Text>
</Paragraph>
<Paragraph Type="Stuff">
<Text>Random information 2</Text>
</Paragraph>
<Paragraph Type="Heading">
<Text>Important information 2</Text>
</Paragraph>
<Paragraph Type="End Of Section">
<Text>End of Section A</Text>
</Paragraph>
<Paragraph Type="New Section">
<Text>Section B</Text>
</Paragraph>
<Paragraph Type="Stuff">
<Text>Random information 3</Text>
</Paragraph>
<Paragraph Type="Heading">
<Text>Important information 3</Text>
</Paragraph>
<Paragraph Type="Stuff">
<Text>Random information 4</Text>
</Paragraph>
<Paragraph Type="Heading">
<Text>Important information 4</Text>
</Paragraph>
<Paragraph Type="End Of Section">
<Text>End of Section B</Text>
</Paragraph>
</Content>
</Root>
期望的输出:
"Important information 1"
"Section A"
"Important information 2"
"Section A"
"Important information 3"
"Section B"
"Important information 4"
"Section B"
正如我所提到的,使用选择和何时测试Paragraph / @ Type =“Heading”我能够获得“重要信息”文本,但我无法弄清楚如何判断它们落在哪个部分之间。
提前谢谢。
答案 0 :(得分:1)
我无法弄清楚如何判断它们落在哪个部分之间。
如果你将问题重述为&#34;哪一部分是当前标题&#34;之前开始的最后一部分,那么它变得相当简单:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/Root">
<xsl:for-each select="Content/Paragraph[@Type='Heading']">
<xsl:value-of select="Text"/>
<xsl:text> </xsl:text>
<xsl:value-of select="preceding-sibling::Paragraph[@Type='New Section'][1]/Text"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>