如何从带xsi:type属性的XML节点中提取指定类型数据?
解决方案
问题核心是xsi属于XML命名空间前缀,你之前直接匹配@type的规则无法命中带命名空间的xsi:type属性,按以下两步调整即可:
- 首先在XSLT的根元素(
<xsl:stylesheet>或<xsl:transform>)中声明xsi对应的命名空间,命名空间URI必须和你原XML文档中xsi前缀绑定的URI完全一致,标准xsi命名空间声明示例如下:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- 其余XSLT配置 -->
- 然后修改
xsl:for-each的选择表达式,指定匹配带xsi命名空间的type属性:
<xsl:for-each select="Event[@xsi:type='steps']"> <!-- 此处填写读取节点内部数据的逻辑 --> </xsl:for-each>
如果你的Event节点不是当前上下文的直接子节点,调整select里的路径到对应层级即可,比如根节点下的Event写为/Event[@xsi:type='steps']。
内容的提问来源于stack exchange,提问作者Lasse Wöien
相关产品推荐
相关产品推荐

