我有两个节点列表,如下所示:
第一个清单:
<WebAddresses>
<item>
<AddressID>01</AddressID>
<Street>Street01</Street>
<State>Idaho<State>
<Country>US</Country>
<item>
<item>
<AddressID>02</AddressID>
<Street>Street02</Street>
<State>Kentucky<State>
<Country>US</Country>
<item>
</WebAddresses>
第二份清单
<Addresses>
<row>
<WebID>02</WebID>
<Line1>Line1</Line1>
<Line2>Line1</Line2>
<State>Lousiana</State>
<Country>US</Country>
</row>
<row>
<WebID>03</WebID>
<Line1>Line1</Line1>
<Line2>Line2</Line2>
<State>California</State>
<Country>US</Country>
</row>
</Addresses>
在我的xslt中我有
<xsl:variable name="webAddr" select="$webXML\\WebAddresses"/>
<xsl:variable name="appAddr" select="$AppXML\\Addresses"/>
我想过滤第二个列表,从而消除第一个列表项中包含WebID
的行,因此输出列表只包含WebID=03
行。我尝试了以下方法:
<xsl:variable name="leftX" select="$appAddr[not(WebID=$webAddr/AddressID)]"/>
但它不是过滤数据,而是返回未更改的appAddr
列表。我可以通过.net代码完成它,但是正在寻找一种xslt方式。请帮忙。
答案 0 :(得分:0)
你需要做一些事情才能发挥作用。
首先,webAddr
和appAddr
变量包含无效的XPath。将这些更改为:
<xsl:variable name="webAddr" select="$webXML//WebAddresses"/>
<xsl:variable name="appAddr" select="$AppXML//Addresses"/>
(或者,更好的是,如果您知道所需的确切XPath,请尽量避免有时浪费的//
轴)。
其次,将您的leftX
变量更改为:
<xsl:variable name="leftX" select="$appAddr/row[WebID = $webAddr/item/AddressID)]"/>
此模板会删除<row>
个孩子的值等于<WebID>
的{{1}}个孙子的所有<AddressID>
个元素。