2011-03-25 16 views
0

這裏是我的用戶的xml:(users.xml中)XSLT - 文檔功能和匹配用於顯示目的

<?xml version="1.0"?> 
<a:class xmlns:a="a"> 
    <a:users> 
    <a:user>User1</a:user> 
    <a:userid>9901</a:userid> 
    </a:users> 
    <a:users> 
    <a:user>User2</a:user> 
    <a:userid>9902</a:userid> 
    </a:users> 
    <a:users> 
    <a:user>User3</a:user> 
    <a:userid>9903</a:userid> 
    </a:users> 
    <a:users> 
    <a:user>User4</a:user> 
    <a:userid>9904</a:userid> 
    </a:users> 
    <a:users> 
    <a:user>User5</a:user> 
    <a:userid>9905</a:userid> 
    </a:users> 
</a:class> 

這是我的sites.xml:

<?xml version="1.0"?> 
<a:sites xmlns:a="a"> 
    <a:user> 
    <a:hassite>true</a:hassite> 
    <a:userid>9901</a:userid> 
    </a:user> 
    <a:user> 
    <a:hassite>false</a:hassite> 
    <a:userid>9902</a:userid> 
    </a:user> 
    <a:user> 
    <a:hassite>true</a:hassite> 
    <a:userid>9903</a:userid> 
    </a:user> 
    <a:user> 
    <a:hassite>false</a:hassite> 
    <a:userid>9904</a:userid> 
    </a:user> 
    <a:user> 
    <a:hassite>false</a:hassite> 
    <a:userid>9905</a:userid> 
    </a:user> 
</a:class> 

我的XSL樣式表:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:a="a"> 

    <xsl:template match="/a:class/a:users"> 

      <xsl:value-of select="document('sites.xml')/a:sites/a:user/a:userid"/> 

    </xsl:template> 

</xsl:stylesheet> 

什麼即時希望做的是從顯示的users.xml中用戶名和用戶ID,然後讀取sites.xml,如果用戶ID是在XML和<a:hassite>值等於'false'顯示單詞'active'。

任何人都可以給我一些提示嗎?

回答

1

以下樣式表:當施加到users.xml

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="a"> 
    <xsl:output method="text"/> 
    <xsl:variable name="sites" select="document('sites.xml')"/> 
    <xsl:template match="a:users"> 
     (<xsl:value-of select="a:user"/>/<xsl:value-of select="a:userid"/> 
     <xsl:if 
      test="$sites/a:sites/a:user[a:userid=current()/a:userid]/a:hassite='false'">/active</xsl:if>) 
    </xsl:template> 
</xsl:stylesheet> 

產生以下輸出:

(User1/9901) 
(User2/9902/active) 
(User3/9903) 
(User4/9904/active) 
(User5/9905/active) 

調整最終的輸出格式的味道。

2

節點集比較只是爲:

<xsl:variable name="vSource2" select="document('sites.xml')"> 
<xsl:template match="/a:class/a:users"> 
    <xsl:if test="a:userid = $vSource2 
           /a:sites 
            /a:user[a:hassite='true'] 
             /a:userid"> 
     <xsl:value-of select="a:userid"/> 
    </xsl:if> 
</xsl:template> 

這樣,你可以只使用一個模式

<xsl:template match="/a:class/a:users[ 
         a:userid = document('sites.xml') 
             /a:sites 
             /a:user[a:hassite='true'] 
              /a:userid 
        ]"> 
    <xsl:value-of select="a:userid"/> 
</xsl:template>