在xsl的节点和子节点中将文本转换为小写 [英] Converting to text to lowercase in nodes and child nodes in xsl

查看:114
本文介绍了在xsl的节点和子节点中将文本转换为小写的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用xsl 2.0,我试图将所有大写文本转换为每个节点中大写字母的第一个字母。它们是大量可能的子元素。

Using xsl 2.0 I'm trying to convert all uppercase text to having only the first letter of text in each node upper-case. Their are a large number of possible child elements.

<text> text text text
<head>BLAH <unkownTag>BLAH</unkownTag> BLAH </head>
</text>

我想将其转换为

<text> text text text
<head>Blah <unkownTag>Blah</unkownTag> Blah </head>
</text>

我最近到达的是

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="head/text()">
    <xsl:value-of select="concat(upper-case(substring(.,1,1)),lower-case(substring(.,2)))"/>        
</xsl:template> 

哪个给了我结果

<text> text text text 
   <head>Blah <unkownTag>BLAH</unkownTag> blah </head>
</text>

如何在head的所有子节点中进行小写转换?

How can I get the lowercase transformation to take place in all child nodes of head?

推荐答案

此转换会产生所需的标点符号,以分隔单词:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="head//text()">
  <xsl:analyze-string select="." regex="\p{{L}}+">
   <xsl:matching-substring>
     <xsl:value-of select=
      "concat(upper-case(substring(.,1,1)), lower-case(substring(.,2)))"/>
   </xsl:matching-substring>
   <xsl:non-matching-substring>
    <xsl:value-of select="."/>
   </xsl:non-matching-substring>
  </xsl:analyze-string>
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档时:

<text> text text text
 <head>BLAH <unkownTag>BLAH</unkownTag> BLAH </head>
</text>

产生了所需的正确结果:

<text> text text text
 <head>Blah <unkownTag>Blah</unkownTag> Blah </head>
</text>

在此XML文档上应用时:

<text> text text text
 <head>BLAH$<unkownTag>BLAH</unkownTag>-BLAH;</head>
</text>

再次产生正确的结果:

<text> text text text
 <head>Blah$<unkownTag>Blah</unkownTag>-Blah;</head>
</text>

说明


  1. 正确使用 < xsl:analyze-string> 指令。

正确使用 \p {L} 字符类。

正确使用 < xsl:matching-substring> < xsl:non-matching-substring> 指令。

这篇关于在xsl的节点和子节点中将文本转换为小写的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆