2015-10-28 12 views
1

我有這個示例XML文件:@select如何在xsl:variable中工作?

<?xml version="1.0" encoding="UTF-8" ?> 

<Diplomanden> 
    <student matrikelNr="91426" nachname="Q1" vorname="M1"/> 
    <student matrikelNr="91427" nachname="Q2" vorname="M2"/> 
    <student matrikelNr="91428" nachname="Q3" vorname="M3"/> 
    <student matrikelNr="91429" nachname="Q4" vorname="M4"/> 
    <student matrikelNr="91430" nachname="Q5" vorname="M5"/> 

    <mitarbeiter persNr="111111" nachname="N1" vorname="V1"/> 
    <mitarbeiter persNr="111112" nachname="N2" vorname="V2"/> 
    <mitarbeiter persNr="111113" nachname="N3" vorname="V3"/> 
    <mitarbeiter persNr="111114" nachname="N4" vorname="V4"/> 

    <schreibt_DA_bei studentRef="91426" persRef="111111"/> 
    <schreibt_DA_bei studentRef="91426" persRef="111112"/> 
    <schreibt_DA_bei studentRef="91427" persRef="111111"/> 
    <schreibt_DA_bei studentRef="91429" persRef="111113"/> 
    <schreibt_DA_bei studentRef="91429" persRef="111113"/> 
    <schreibt_DA_bei studentRef="91429" persRef="111112"/> 
</Diplomanden> 

和轉換文件:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 

    <xsl:template match="schreibt_DA_bei"> 
     <xsl:variable name = "sR" select="@studentRef"/> 

     <xsl:variable name = "s" select="//student[@matrikelNr = $sR]"/> 

     <!-- OUTPUT --> 
Student <xsl:value-of select="normalize-space($s/@nachname)"/> schreibt Diplomarbeit 
    </xsl:template> 

    <xsl:template match="text()|@*"/> 
</xsl:transform> 

對於

<xsl:variable name = "s" select="//student[@matrikelNr = $sR]"/> 

爲什麼參數選擇可變s工作? //表示「後代或自己」,我的實際節點是schreibt_DA_bei。在我看來,「前同胞::學生」的權利(它也有效),但爲什麼「後裔或自我」找到合適的學生?

如果我執行如下的XPath表達式:/child::Diplomanden/child::schreibt_DA_bei/descendant-or-self::student沒有選擇學生。

回答

2

xsl:variableselect屬性適用相對於當前節點,但只有當給定一個相對 XPath表達式。如果給定絕對值 XPath表達式,則當前節點不相關。

//student[@matrikelNr = $sR]"/>不管當前節點如何工作,因爲它是絕對的,而不是相對的XPath。

如果是.//student[@matrikelNr = $sR]"/>(注意是領先.),那麼上下文會的問題,你會是正確的,它不會選擇任何student元素在當前節點是schreibt_DA_bei要素之一。

相關問題