Vb.net 使用param在.Net中过滤xml

Vb.net 使用param在.Net中过滤xml,vb.net,xslt,param,Vb.net,Xslt,Param,我试图在正在开发的.Net应用程序中过滤xml文件。下面是一些示例xml,显然不是正确的xml,但足够接近:-) 艾希礼 B队 3/25/2012 511681.15 凯莉 A队 9/28/2010 408438.47 吉安娜 B队 40004 109709.22 追逐 F队 40152 279018.79 样式表有一个由应用程序中的XsltArgumentList设置的参数。参数被传递到样式表中,但不过滤xml。我尝试使用ms节点集和exsl节点集,但只返回了顶级根。样式表如下: <

我试图在正在开发的.Net应用程序中过滤xml文件。下面是一些示例xml,显然不是正确的xml,但足够接近:-)


艾希礼
B队
3/25/2012
511681.15
凯莉
A队
9/28/2010
408438.47
吉安娜
B队
40004
109709.22
追逐
F队
40152
279018.79

样式表有一个由应用程序中的XsltArgumentList设置的参数。参数被传递到样式表中,但不过滤xml。我尝试使用ms节点集和exsl节点集,但只返回了顶级根。样式表如下:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:output method="xml" indent="yes" encoding="UTF-8" />
<xsl:decimal-format name="NN" NaN="0" />
<xsl:param name="Filter"  />
<xsl:template match="/">
    <Root>
        <xsl:for-each select="exsl:node-set($Filter)">
            <Row>
                <xsl:attribute name="A1">
                    <xsl:value-of select="@A1" />
                </xsl:attribute>
                <xsl:attribute name="A2">
                    <xsl:value-of select="@A2" />
                </xsl:attribute>
                <Team>
                    <xsl:value-of select="Team"/>
                </Team>
            </Row>
        </xsl:for-each>
    </Root>
</xsl:template>

我试图通过的过滤器可以使用xml元素的任意组合。当前正在尝试的筛选器如下所示

<xsl:param name="Filter" select="//Row[Team='Team A']" />

但这只是回报

<?xml version="1.0" encoding="utf-8"?>
<Root>
<Row A1="" A2="">
<Team></Team>
</Row>
</Root>

任何帮助或指点都将不胜感激


谢谢

这不会像您尝试过的那样被唤醒,因为您不能在XLST参数或变量中使用xpath表达式。您可以在常量值中使用变量或参数

因此,您可以使用

<xsl:param name="teamFilter" select="'Team A'" />
...
 <xsl:for-each select="//Row[Team='$teamFilter']">

...
或者,如果必须筛选不同的节点,可以尝试:

<xsl:param name="filterValue" select="'Team A'" />
<xsl:param name="filterNode" select="'Team'" />


其他替代办法是:

  • 在加载XSLT之前对其进行修补
  • 将xpath迭代器与.NET中的XPathExpression一起使用

谢谢,但这不起作用。我现在已经重新设计了使用Navigator对象过滤数据并循环遍历节点的方法。select语句中有两个小错误。
<xsl:param name="filterValue" select="'Team A'" />
<xsl:param name="filterNode" select="'Team'" />
<xsl:for-each select="//Row[*[name()= $filterNode and . =$filterValue]]">