这是我的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替换为字符串(斜杠),但它不能用于标记。
提前致谢。
答案 0 :(得分:1)
问题在于匹配 XX 的模板。查看文档中 XX 节点的特定示例,例如
<XX>bla<REG /> bla</XX>
然后这个 XX 元素实际上有三个子节点;文本节点“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>