2013-07-01 2 views
0

.Net 응용 프로그램에서 xml 파일을 필터링하려고합니다. 아래에 몇 가지 샘플 XML, 분명하지 적절한 XML,하지만 충분히 :-) 근처필터 xml in .Net with param

<?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 있습니다. 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> 

반환! 당신이 XLST 매개 변수 또는 변수에 XPath 식을 가질 수 없기 때문이 아닌 당신처럼 났을 것

감사

답변

0

은 그것을 시도했다. 변수 나 매개 변수를 const 값으로 사용할 수 있습니다.

따라서 당신은

<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]]"> 

다른 대안 것 be :

  • 로드하기 전에 XSLT를 패치하십시오.
  • .NET에서 XPathExpression으로 xpath 반복자를 사용하십시오.
+0

감사합니다. 그러나 이것은 작동하지 않았습니다. 이제 Navigator 객체를 사용하고 노드를 반복하여 데이터를 필터링하는 방법을 다시 설계했습니다. – GrahamCFNewc

+0

select 문에 두 개의 작은 버그가있었습니다. –