xslt 2.0 替换为 xml-结构
xslt 2.0 replace with xml-structure
我正在使用 xslt 2.0 和替换功能。我的任务是用结构替换字符串的一部分。
例子
输入:
<xml>
<content>Title 1: This will be on a new line</content>
</xml>
输出:
<xml>
<content>Title 1:</content><content>This will be on a new line</content>
</xml>
根据 xslt 2.0,我不允许在替换字符串中包含 < 或 >。
如果我也使用正在输出的 < 或 >...
我正在使用的 xslt 有点像这样:
<xsl:value-of select="replace(., '(.*)\s+(.*)', </content><content>"/>
感谢 我能够解决这个问题。
我不得不做一些调整,但确实有效。
解决方法如下:
<xsl:analyze-string select="." regex="(.*)(\d+)\s+(.*)">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)"/>
<xsl:text> </xsl:text>
<xsl:value-of select="regex-group(2)"/>
<xsl:call-template name="ELEMENT_CONTENT_END"/>
<xsl:call-template name="ELEMENT_BR"/>
<xsl:call-template name="ELEMENT_CONTENT_START"/>
<xsl:value-of select="regex-group(3)"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="normalize-space(.)"/>
</xsl:non-matching-substring>
</xsl:analyze-string>
ELEMENT_CONTENT_START 和 ELEMENT_CONTENT_START 定义如下:
<xsl:template name="ELEMENT_CONTENT_END">
<xsl:text disable-output-escaping="yes"></content> </xsl:text>
</xsl:template>
<xsl:template name="ELEMENT_CONTENT_START">
<xsl:text disable-output-escaping="yes"><content> </xsl:text>
</xsl:template>
感谢迈克尔的宝贵建议!
AFAIK,你想做简化:
<xsl:template match="content">
<xsl:analyze-string select="." regex="^\D*\d+:\s+">
<xsl:matching-substring>
<content>
<xsl:value-of select="normalize-space(.)"/>
</content>
</xsl:matching-substring>
<xsl:non-matching-substring>
<content>
<xsl:value-of select="."/>
</content>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
我正在使用 xslt 2.0 和替换功能。我的任务是用结构替换字符串的一部分。 例子
输入:
<xml>
<content>Title 1: This will be on a new line</content>
</xml>
输出:
<xml>
<content>Title 1:</content><content>This will be on a new line</content>
</xml>
根据 xslt 2.0,我不允许在替换字符串中包含 < 或 >。 如果我也使用正在输出的 < 或 >...
我正在使用的 xslt 有点像这样:
<xsl:value-of select="replace(., '(.*)\s+(.*)', </content><content>"/>
感谢
解决方法如下:
<xsl:analyze-string select="." regex="(.*)(\d+)\s+(.*)">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)"/>
<xsl:text> </xsl:text>
<xsl:value-of select="regex-group(2)"/>
<xsl:call-template name="ELEMENT_CONTENT_END"/>
<xsl:call-template name="ELEMENT_BR"/>
<xsl:call-template name="ELEMENT_CONTENT_START"/>
<xsl:value-of select="regex-group(3)"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="normalize-space(.)"/>
</xsl:non-matching-substring>
</xsl:analyze-string>
ELEMENT_CONTENT_START 和 ELEMENT_CONTENT_START 定义如下:
<xsl:template name="ELEMENT_CONTENT_END">
<xsl:text disable-output-escaping="yes"></content> </xsl:text>
</xsl:template>
<xsl:template name="ELEMENT_CONTENT_START">
<xsl:text disable-output-escaping="yes"><content> </xsl:text>
</xsl:template>
感谢迈克尔的宝贵建议!
AFAIK,你想做简化:
<xsl:template match="content">
<xsl:analyze-string select="." regex="^\D*\d+:\s+">
<xsl:matching-substring>
<content>
<xsl:value-of select="normalize-space(.)"/>
</content>
</xsl:matching-substring>
<xsl:non-matching-substring>
<content>
<xsl:value-of select="."/>
</content>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>