XSLT中的表达式$data[not(key(';myKey';,@myRef))]是什么意思?

XSLT中的表达式$data[not(key(';myKey';,@myRef))]是什么意思?,xslt,xpath,xslt-1.0,xpath-1.0,Xslt,Xpath,Xslt 1.0,Xpath 1.0,我读这样的表达 <xsl:variable name="myVar" select="$data[not(key('myKey',@myRef))]"/> 在遗留代码中。最有可能的是来自专家的代码;-)。我想知道它是做什么的,它是如何工作的,我如何重新输入它以使它更具可读性。谢谢。键是XSLT的一个重要方面。与其重新设计它们,不如学习这个概念 键可以理解为具有存储在特定键下的节点的表。它们的定义如下: <xsl:variable name="dict"> <

我读这样的表达

<xsl:variable name="myVar" select="$data[not(key('myKey',@myRef))]"/>


在遗留代码中。最有可能的是来自专家的代码;-)。我想知道它是做什么的,它是如何工作的,我如何重新输入它以使它更具可读性。谢谢。

键是XSLT的一个重要方面。与其重新设计它们,不如学习这个概念

键可以理解为具有存储在特定键下的节点的表。它们的定义如下:

<xsl:variable name="dict">
  <ITEMS>
    <ITEM id="1" content="it1">
      <ITEM-REF ref="3"/>
    </ITEM>
    <ITEM id="2" content="it2">
      <ITEM-REF ref="1"/>
    </ITEM>
    <ITEM id="3" content="it3">
      <ITEM-REF ref="6"/>
    </ITEM>
    <ITEM id="4" content="it4">
      <ITEM-REF ref="3"/>
    </ITEM>
    <ITEM id="5" content="it5">
      <ITEM-REF ref="5"/>
    </ITEM>
    <ITEM id="6" content="it6">
      <ITEM-REF ref="8"/>
    </ITEM>
    <ITEM id="7" content="it7">
      <ITEM-REF ref="9"/>
    </ITEM>
  </ITEMS>
</xsl:variable>

name
属性只是一个QName(类似于变量名)。
match
属性包含一个XPath表达式,其工作原理与
match
属性类似。当处理器找到与表达式匹配的节点时,它会在匹配元素的上下文中计算
use
属性的XPath表达式。如果此表达式返回值,它们将用于在“键表”中为匹配元素创建新条目


为了说明这一点:上面的键创建了一个包含所有

的表,我现在已经得到了用例。不,它不是遗留代码。这一点从密钥和数据的上下文和定义中是清楚的

如果我们有这样的数据:

<xsl:variable name="dict">
  <ITEMS>
    <ITEM id="1" content="it1">
      <ITEM-REF ref="3"/>
    </ITEM>
    <ITEM id="2" content="it2">
      <ITEM-REF ref="1"/>
    </ITEM>
    <ITEM id="3" content="it3">
      <ITEM-REF ref="6"/>
    </ITEM>
    <ITEM id="4" content="it4">
      <ITEM-REF ref="3"/>
    </ITEM>
    <ITEM id="5" content="it5">
      <ITEM-REF ref="5"/>
    </ITEM>
    <ITEM id="6" content="it6">
      <ITEM-REF ref="8"/>
    </ITEM>
    <ITEM id="7" content="it7">
      <ITEM-REF ref="9"/>
    </ITEM>
  </ITEMS>
</xsl:variable>
输出:

<?xml version="1.0" encoding="utf-8"?>
<REFERENCED-NOT-EXISTING>
  <ITEM id="8" />
  <ITEM id="9" />
</REFERENCED-NOT-EXISTING>

输入文件:

<?xml version="1.0" encoding="utf-8"?>
<START/>


@Tomalak你好,Tomalak。你之前回答、更正、评论(多次),最后删除了你的重要帖子和答案。在别人写的评论部分中有很多重要的信息,还有到fiddle的链接。它现在丢了。你为什么删除你的答案-(我猜他删除它是因为评论的数量太多了,并且有更多不相关的问题被问到了。如果你有更多问题,请单击“提问”按钮提出新问题。Stackoverflow不应像讨论论坛一样使用。
<?xml version="1.0" encoding="utf-8"?>
<START/>