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/>