xslt - XSLT:如何在 p 元素中连接 t 元素
问题描述
我需要在 p 元素中连接 t 元素。我尝试使用 xsl:for-each-group 并将 t 元素中的文本存储在变量中。但我不能在 xsl:template 之外使用这个变量。
来源:
<document>
<body>
<p>
<pPr>
<spacing line="286" lineRule="auto"/>
</pPr>
<r>
<t>First:</t>
</r>
</p>
<p>
<pPr>
<numPr>
<ilvl val="0"/>
<numId val="17"/>
</numPr>
<spacing line="286" lineRule="auto"/>
</pPr>
<r>
<t>Second</t>
</r>
<r>
<t space="preserve"> third</t>
</r>
<r>
<t space="preserve"> </t>
</r>
<r>
<t>last.</t>
</r>
</p>
</body>
</document>
期望的结果:
<document>
<body>
<p>
<pPr>
<spacing line="286" lineRule="auto"/>
</pPr>
<r>
<t>First:</t>
</r>
</p>
<p>
<pPr>
<numPr>
<ilvl val="0"/>
<numId val="17"/>
</numPr>
<spacing line="286" lineRule="auto"/>
</pPr>
<r>
<t>Second third last.</t>
</r>
</p>
</body>
</document>
到目前为止我的尝试:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:mf="http://example.com/mf"
xmlns:w="www.wnamespace.com"
version="2.0"
exclude-result-prefixes="xs mf w">
<xsl:strip-space elements="*"/>
<xsl:preserve-space elements="t"/>
<xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*, node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="p">
<xsl:for-each-group select="node()" group-adjacent="boolean(self::r)">
<xsl:variable name="concat-t">
<xsl:sequence select="current-group()[self::r]"></xsl:sequence>
</xsl:variable>
<xsl:choose>
<xsl:when test="self::r">
</xsl:when>
<xsl:otherwise>
<p><xsl:copy-of select="current-group()"/></p>
</xsl:otherwise>
</xsl:choose>
<t><xsl:value-of select="$concat-t"/></t>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
我是 XSLT 2.0 的新手,有点不知所措。任何帮助appriciated。XsltFiddle:http: //xsltfiddle.liberty-development.net/pNEj9dj
解决方案
好像身份转换加两个模板
<xsl:template match="p/r[1]">
<p>
<t>
<xsl:value-of select="../r/t"/>
</t>
</p>
</xsl:template>
<xsl:template match="p/r[position() gt 1]"/>
应该做的工作。
推荐阅读
- puppeteer - 如何 page.click 一个 ember.js 计算元素?
- serialization - 如何使用 newtonsoft.json 反序列化复杂对象列表
- javascript - Javascript切片方法,从某个word.s开始
- javascript - 试图弄清楚如何安装这个 jquery 脚本
- azure - 使用 asp.net 核心在 F1/D1 Azure 计划中生成 PDF
- python - lxml - 多个根和格式问题
- c# - 用特定模式填充矩阵
- mysql - MySQL:两边的TRIM空格和换行符
- c# - 仅增量到特定数字然后开始增量
- django - 使用 transaction.atomic() 和 transaction.commit()