0

我有两个节点列表,如下所示:

第一个清单:

<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 方式。请帮忙。

4

1 回答 1

0

您必须做一些事情才能使其正常工作。

首先,webAddrandappAddr变量包含无效的 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>子元素的值等于 的任何<AddressID>孙子元素的所有元素<WebAddresses>

于 2013-06-11T13:44:16.030 回答