从响应中过滤键

  • 本文关键字:过滤 响应 xslt-1.0
  • 更新时间 :
  • 英文 :


我有一个xslt表,其中有2个响应对象。$response1包含一个id列表,如:

<response>
  <idlist>
    <id>1</id>
    <id>2</id>
  </idlist>
</response>

和$response2包含多个对象:

<response2>
  <obj id="1" name="obj1"/>
  <obj id="2" name="obj2"/>
  <obj id="3" name="obj3"/>
  <obj id="4" name="obj4"/>
</response2>

我想复制response2,但要过滤掉任何id与response 1中包含的id匹配的对象

<xsl:variable name="copy">
  <xsl:copy-of select="$response2/*[not contains($response1, id)]"/>
</xsl:variable>

任何想法都非常感谢C

给定一个格式良好的输入,如:

<root>
  <response>
    <idlist>
      <id>1</id>
      <id>2</id>
    </idlist>
  </response>
  <response2>
    <obj id="1" name="obj1"/>
    <obj id="2" name="obj2"/>
    <obj id="3" name="obj3"/>
    <obj id="4" name="obj4"/>
  </response2>
</root>

:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/root">
    <xsl:variable name="ids" select="response/idlist/id" />
    <output>
        <xsl:copy-of select="response2/obj[not(@id=$ids)]"/>
    </output>
</xsl:template>
</xsl:stylesheet>

将返回:

<?xml version="1.0" encoding="UTF-8"?>
<output>
   <obj id="3" name="obj3"/>
   <obj id="4" name="obj4"/>
</output>

更好的解决方案是使用通过匹配id:

来连接节点XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="id" match="id" use="." />
<xsl:template match="/root">
    <output>
        <xsl:copy-of select="response2/obj[not(key('id', @id))]"/>
    </output>
</xsl:template>
</xsl:stylesheet>

相关内容

  • 没有找到相关文章

最新更新