Vb.net 使用param在.Net中过滤xml
我试图在正在开发的.Net应用程序中过滤xml文件。下面是一些示例xml,显然不是正确的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节点集,但只返回了顶级根。样式表如下: <
艾希礼
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一起使用
<xsl:param name="filterValue" select="'Team A'" />
<xsl:param name="filterNode" select="'Team'" />
<xsl:for-each select="//Row[*[name()= $filterNode and . =$filterValue]]">