首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据在另一个元素xslt-3中找到的值删除元素。

根据在另一个元素xslt-3中找到的值删除元素。
EN

Stack Overflow用户
提问于 2022-07-01 09:20:39
回答 1查看 15关注 0票数 0

以下工作:

代码语言:javascript
复制
<xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output omit-xml-declaration="yes" indent="yes"/>
     <xsl:strip-space elements="*"/>
    
     <xsl:template match="node()|@*">
      <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
     </xsl:template>
    
     <xsl:template match=
     "*[ID='579']/EMAIL"/>
    </xsl:stylesheet>

但我需要删除基于许多ID值的电子邮件元素,如下所示:

代码语言:javascript
复制
"*[ID='579|987|1023']/EMAIL"/>

你怎么用xslt-3更聪明地做这件事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-01 09:47:04

使用字符串序列参数。

代码语言:javascript
复制
<xsl:param name="ids" as="xs:string*" select="'579', '987', '1023'"/>

那么您可以使用match="*[ID = $ids]/EMAIL"

代码语言:javascript
复制
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="3.0"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  exclude-result-prefixes="#all">

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:param name="ids" as="xs:string*" select="'579', '987', '1023'"/>

  <xsl:template match="*[ID = $ids]/EMAIL"/>

</xsl:stylesheet>

或传入用|分隔并使用match="*[ID = tokenize($ids, '\|')]/EMAIL"的单个字符串。

代码语言:javascript
复制
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="3.0"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  exclude-result-prefixes="#all">

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:param name="ids" as="xs:string" select="'579|987|1023'"/>

  <xsl:template match="*[ID = tokenize($ids, '\|')]/EMAIL"/>

</xsl:stylesheet>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72827089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档