xslt - XSLT 可以执行 XML 解码然后处理结果吗?
问题描述
我有这个输入 XML,它在概念上看起来像这样:
<x>
<a>a text</a>
<b datamodel="<y>
 <a>a text</a>
 <b>someone's text></b>
</y>" />
</x>
datamodel 的值是另一段 XML 的 XML 编码字符串:
<y>
<a>a text</a>
<b>someone's text></b>
</y>
注意
>
并且'
不分别 编码为>
和'


表示输入
XSLT 有没有办法检索datamodel
的值、执行解码并显示 ya 或 yb 的值?
解决方案
在 XPath 3 或 3.1 中,您拥有该parse-xml
功能,因此使用任何 XSLT 3 处理器或 XSLT 2 处理器让您可以访问 XPath 3 功能,例如parse-xml(@datamodel)/y/(a, b)
:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:mode on-no-match="shallow-skip"/>
<xsl:template match="b[@datamodel]">
<xsl:copy>
<xsl:value-of select="parse-xml(@datamodel)/y/(a, b)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
https://xsltfiddle.liberty-development.net/ncdD7kW使用实现 XSLT 3、Altova 2017 和更高版本的 Saxon 9.8,我认为早期版本的 Saxon(至少 9.7)已经支持该parse-xml
功能,因为我认为 XmlPrime 4 可以。
当然,对于其他或更旧的 XSLT 1 或 2 处理器,通常有一种专有方式来使用扩展功能,即使是 MSXML 3 或 6,一个 XSLT 1 处理器,只要msxsl:script
启用它,也将允许这样做。
推荐阅读
- css - 如何在bootstrap css和angular 7中适合像facebook这样的图像集
- mysql - 为什么 INNER JOIN 在包含匹配数据的两个表上返回空集?
- javascript - 将按钮切换回默认 html
- javascript - 在javascript中将字符串转换为数组内的整数
- python - 装饰器 - 更改变量名称
- c# - 获取远程服务器返回错误:(504) WebAPI 网关超时
- r - 在我的包中使用另一个包中的 'as'/coerce 方法
- python - 带有前导 $ 字符的命名捕获组替代项的正则表达式
- javascript - 如何从与唯一 uid 键相关的 firebase 实时数据库中获取子值?
- python - 尝试基于嵌套模型外键过滤 django 视图序列化程序