xslt-2.0 - XSLT 用点分隔字符转换字符串
问题描述
我正在使用 XSLT 来转换 XML。我想initials
用点分割节点的字符:
我需要更改以下内容initials
:
- 每个字符由一个点分隔
- 大写每个字符
- 删除空格
如果它们不存在,我找不到分割字符并插入 DOTS 的方法。
<?xml version="1.0" encoding="UTF-8"?>
<jsonObject>
<account>
<initials>ABC</initials>
</account>
<account>
<initials>A BC</initials>
</account>
<account>
<initials>A.B.C </initials>
</account>
<account>
<initials>a.B.C</initials>
</account>
</jsonObject>
我想要转换后的以下输出:
<results>
<account>
<field name="initials">A.B.C</field>
</account>
<account>
<field name="initials">A.B.C</field>
</account>
<account>
<field name="initials">A.B.C</field>
</account>
<account>
<field name="initials">A.B.C</field>
</account>
</results>
到目前为止我的样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<results>
<xsl:for-each select="account">
<account>
<field name="initials"><xsl:value-of select="upper-case(translate(initials, ' ',''))"/></field>
</account>
</xsl:for-each>
</results>
</xsl:template>
</xsl:stylesheet>
解决方案
我找到了一个解决方案:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:functx="http://www.functx.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:function name="functx:chars" as="xs:string*" xmlns:functx="http://www.functx.com">
<xsl:param name="arg" as="xs:string?"/>
<xsl:sequence select="
for $ch in string-to-codepoints($arg)
return codepoints-to-string($ch)
"/>
</xsl:function>
<xsl:template match="/*">
<results>
<xsl:for-each select="account">
<account>
<field name="initials"><xsl:value-of select="string-join(functx:chars(upper-case(translate(translate(initials, '.',''), ' ',''))), '.')"/></field>
</account>
</xsl:for-each>
</results>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- c++ - 函数指针 Arduino 作为回调 Bluefruit 库
- java - ANTLR4 查找标记但返回截断的解析树
- c# - 如何将 `|` 操作数应用于字符串?
- php - 许多现有的对 MySQL 与加载表的检查查询并在 php 中进行比较
- javascript - 在请求模块 Javascript 中使用 async/await
- ruby-on-rails - 在 Rails 5 下,使用 helper link_to 和方法 delete 发出 get 和 object#show 而不是 object#destroy
- javascript - 如果语句不能正常工作 [React hooks]
- node.js - 我正在尝试通过 nodejs 访问本地超级账本测试网络链代码,以编写 api
- python - 通过 Excel 制作 CSV 会在第一列名称前显示“”
- c - 检查链表是否在 C 中排序(升序)?