2014-11-29 9 views
0

를 사용하여.XSLT 필터 변수 노드 집합 내가 무엇을 믿는 변수 노드 집합을 필터링 할 수 없다는 것입니다에 문제가 입력

이 나는 ​​문서의 집합에서 노드가-설정하고 내가 입력을 에코 그 노드가 입력에 이미 존재하지 않으면 변수 노드를 추가 할로 채워집니다 변수가 있습니다.

<xsl:variable name="views" select="collection('file:/C:/temp/?select=*.xml;recurse=yes')"/>  

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="/"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | *"/> 
<!-- having trouble with the filter here never works --> 
     <xsl:for-each select="$views/someElement[not(@name=(//someInputElement/@name))]"> 
<!-- copy stuff in --> 
     </xsl:for-each> 
    </xsl:copy> 
</xsl:template> 

입력에 name 속성이있는 someInputElement 인스턴스가 많이있을 것입니다. 예상대로

내가 목표에 대한 XPath는 // someInputElement/@ 이름을 실행

나는 목록을 얻을.

조언은 대부분의 평가.

+0

재현 가능한 예가 유용 할 수 있습니다. IMHO. 그렇듯이 변수에 무엇이 있는지, 입력 내용을 볼 수 없습니다. –

+0

필자는 필터에 대한 통찰력과 효과적인 접근 방법을 기대합니다. $ views 변수에서 선택 항목을 필터링하는 데 실패합니다. 나는 내 질문에 someImputElement 인스턴스에 많은 이름이있을 것이라고 덧붙였다. – rocketboy2000

답변

0

은 내가 ... 답을 발견했습니다 내가 오늘 다른 곳에서 볼 수있는 힌트에서 내가 다시 루트에 대한 참조를 추가 한 필터의 것을 사용 믿습니다.

<xsl:variable name="views" select="collection('file:/C:/temp/?select=*.xml;recurse=yes')"/>  
<xsl:variable name="root" select="/" /> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="/"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | *"/> 
     <!-- filter referring back to the root of the input --> 
     <xsl:for-each select="$views/someElement[not(@name=($root//someInputElement/@name))]"> 
      <!-- copy stuff in --> 
     </xsl:for-each> 
    </xsl:copy> 
</xsl:template> 
+0

효율성을 위해''키를 추가하고 단순히'$ views/someElement [not (key ('by -name ', @name, $ root))]'. –

+0

그거 멋지다. 고마워. – rocketboy2000