2013-07-01 90 views
0

我正在嘗試在我正在開發的.Net應用程序中篩選一個xml文件。下面的一些示例XML,顯然不是正確的XML,但足夠近:-)使用參數篩選xml in .Net

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<Row A1="1" A2="AMS"> 
    <Name>Ashley</Name> 
    <Team>Team B</Team> 
    <Date>3/25/2012</Date> 
    <Value>511681.15</Value> 
</Row> 
<Row A1="2" A2="AMS"> 
    <Name>Kylie</Name> 
    <Team>Team A</Team> 
    <Date>9/28/2010</Date> 
    <Value>408438.47</Value> 
</Row> 
<Row A1="3" A2="AMS"> 
    <Name>Gianna</Name> 
    <Team>Team B</Team> 
    <Date>40004</Date> 
    <Value>109709.22</Value> 
</Row> 
<Row A1="4" A2="AMS"> 
    <Name>Chase</Name> 
    <Team>Team F</Team> 
    <Date>40152</Date> 
    <Value>279018.79</Value> 
</Row> 

樣式表具有由在的XsltArgumentList應用程序中設置一個PARAM。該參數被傳入到樣式表中,但不會過濾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> 

任何幫助或指針將不勝感激!

感謝

回答

0

這不會醒來喜歡你試了一下,因爲你不能在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'" /> 

...

<xsl:for-each select="//Row[*[name()= $filterNode and . =$filterValue]]"> 

其他替代辦法成爲:

  • 在加載之前修補XSLT
  • 將xpath迭代器與.NET中的XPathExpression結合使用。
+0

謝謝,但這沒有奏效。我現在重新設計了使用導航器對象過濾數據並循環遍歷節點的方法 – GrahamCFNewc

+0

select語句中有兩個小錯誤。 –