2

这是我的 XML:

<p>
  <t>bla bla bla <XX>bla<REG /> bla</XX> bla</t>
  <t>bli bli bli <XX>bli bli</XX> bli</t>
  <t>blo <REG /> blo blo <XX>blo blo <REG /></XX></t>
</p>

我想提取包含在 XX 中的文本并用斜杠替换 REG - 同时(为了有 bla / bla - 第一行的示例)。

我可以一次做两个,但我无法将这两个规则都应用到我的标签上。XSLT 1.0 可以吗?

这是我的 XSLT 规则(非常基本):

<xsl:template match="REG">
  <xsl:text> / </xsl:text>
</xsl:template>

<xsl:template match="XX">
  <xsl:value-of select="normalize-space(.)"/>
</xsl:template>

我尝试使用 substring-before 和 substring-after 替换为字符串(斜杠),但它不适用于标签。

提前致谢。

4

1 回答 1

1

问题在于与XX匹配的模板。例如,查看文档中XX节点的特定示例

<XX>bla<REG /> bla</XX>

那么这个XX元素其实有3个子节点;一个文本节点“blah”、REG元素和另一个文本节点“blah”。所以,你应该认为XX只有单一的内容。对其执行xsl:value-of,只需连接其中的所有后代文本节点。

您需要做的是将与XX匹配的当前模板替换为两个模板。

第一个将匹配当前的XX,但只是将处理传递给它的子元素(即不会输出 XX)。第二个模板将专门匹配XX元素的子文本节点,然后您可以在其中输出文本

试试这两个模板

<xsl:template match="XX">
  <xsl:apply-templates />
</xsl:template>

<xsl:template match="XX/text()">
  <xsl:value-of select="normalize-space(.)"/>
</xsl:template>
于 2013-09-30T21:18:33.320 回答