繁体   English   中英

XSLT用于带有任意标签的XML文档

[英]XSLT for an XML document with arbitrary tags

为了澄清标题,我有一个XML文档,如下所示:

<group>
  <starter>Start</starter>
  <backup1>Backup1</backup1>
</group>
<group>
  <starter>Another starter</starter>
  <backup1>Backup1</backup1>
  <backup2>Backup2</backup2>
  <backup3>Backup3</backup3>
  <reserve>Reserve</reserve>
</group>

因此,每个组可以具有任意数量的<backupN>标签。 我需要确保我的XSLT抓住了所有它们,并将它们重命名为“ backup_n”。 通常,我的XSLT将应用符合以下条件的内容:

<xsl:for-each select="group/backup">

并围绕该xpath选择。 显然,即使只有1个备份,它仍然仍然命名为<backup1>并且还可以有任意数量的<backupN>标记,因此<backupN>

围绕这样的任意标记的最佳方法是什么? 我正在使用XSLT 1.0,因此不能真正使用任何XSLT 2.0优势。

如果您希望所有名称以backup开头的元素,则可以使用

<xsl:for-each select="group/*[starts-with(local-name(), 'backup')]">

但是根据您要产生的输出的确切类型,使用模板匹配而不是for-each可能更干净。

如果您特别想限制名称为“ backup”后跟数字的元素(例如,不包括backuptype东西),则可以添加到谓词中

group/*[starts-with(local-name(), 'backup')
    and number(substring(local-name(), 7)) = number(substring(local-name(), 7))]

(这看起来很奇怪,但诀窍在于,如果substring(local-name(), 7)不是有效数字,则测试将变为NaN = NaN ,这始终为假NaN不等于任何值,甚至不等于其本身)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM