2012-02-03 99 views
1

子值我有這樣的一個xml獲得父母從XML

<?xml version="1.0" encoding="UTF-8"?> 
<setting> 
<Key name="com.ahsay.afc.cpf.UserGroup" content="" allowMultiple="Y"> 
    <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="1328200856753" /> 
    <Value name="rsv-group-name" inheritParentAttribute="Y" type="string" data="group 1" /> 
    <Value name="rsv-user-type" inheritParentAttribute="Y" type="string" data="backup-user" /> 
    <Value name="rsv-owner" inheritParentAttribute="Y" type="string" data="" /> 
<Key name="com.ahsay.afc.cpf.User" content="" allowMultiple="Y"> 
    <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="13279083887401" /> 
    <Value name="rsv-login-name" inheritParentAttribute="Y" type="string" data="name1" /> 
</Key> 
<Key name="com.ahsay.afc.cpf.User" content="" allowMultiple="Y"> 
    <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="13279083887401" /> 
    <Value name="rsv-login-name" inheritParentAttribute="Y" type="string" data="name2" /> 
</Key> 
</Key> 
<Key name="com.ahsay.afc.cpf.UserGroup" content="" allowMultiple="Y"> 
    <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="1328200856753" /> 
    <Value name="rsv-group-name" inheritParentAttribute="Y" type="string" data="group 2" /> 
    <Value name="rsv-user-type" inheritParentAttribute="Y" type="string" data="backup-user" /> 
    <Value name="rsv-owner" inheritParentAttribute="Y" type="string" data="" /> 
<Key name="com.ahsay.afc.cpf.User" content="" allowMultiple="Y"> 
    <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="13279083887401" /> 
    <Value name="rsv-login-name" inheritParentAttribute="Y" type="string" data="name3" /> 
</Key> 
<Key name="com.ahsay.afc.cpf.User" content="" allowMultiple="Y"> 
    <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="13279083887401" /> 
    <Value name="rsv-login-name" inheritParentAttribute="Y" type="string" data="name4" /> 
    </Key> 
</Key> 
</setting> 

的,我想從做RSV-登錄名數據=「值」獲得RSV-組名稱數據=「值」

這也是我給解析器NAME3,我想它返回組2

盡我來了到現在爲止是這樣的:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:key name="umm" match="Value" use="@data"/> 
<xsl:key name="amm" match="Value" use="@name"/> 
<xsl:template match="/"> 
<xsl:for-each select="key('umm','name3')"> 
<p>  
<xsl:value-of select="../../@name" /> 
</p> 
</xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 

女巫給我 「com.ahsay.afc.cpf.UserGroup」 不正是最好的結果:)

回答

0

試試這個:

<xsl:value-of select="../../Value[@name = 'rsv-group-name']/@data"/> 
+0

謝謝這個工作 – user1187425 2012-02-03 16:29:49

0

使用密鑰效率的解決方案:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:key name="kValueByData" match="Value" use="@data"/> 

<xsl:key name="kValueByKeyAndName" match="Value" 
    use="concat(generate-id(..), '+', @name)"/> 

<xsl:template match="/"> 
    <xsl:value-of select= 
    "key('kValueByKeyAndName', 
      concat(generate-id(key('kValueByData', 'name3')/../..), 
         '+', 
         'rsv-group-name' 
       ) 
     ) 
      /@data 
    "/> 
</xsl:template> 
</xsl:stylesheet> 

將此轉換應用於提供的XML文檔時

<setting> 
    <Key name="com.ahsay.afc.cpf.UserGroup" content="" allowMultiple="Y"> 
     <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="1328200856753" /> 
     <Value name="rsv-group-name" inheritParentAttribute="Y" type="string" data="group 1" /> 
     <Value name="rsv-user-type" inheritParentAttribute="Y" type="string" data="backup-user" /> 
     <Value name="rsv-owner" inheritParentAttribute="Y" type="string" data="" /> 
     <Key name="com.ahsay.afc.cpf.User" content="" allowMultiple="Y"> 
      <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="13279083887401" /> 
      <Value name="rsv-login-name" inheritParentAttribute="Y" type="string" data="name1" /> 
     </Key> 
     <Key name="com.ahsay.afc.cpf.User" content="" allowMultiple="Y"> 
      <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="13279083887401" /> 
      <Value name="rsv-login-name" inheritParentAttribute="Y" type="string" data="name2" /> 
     </Key> 
    </Key> 
    <Key name="com.ahsay.afc.cpf.UserGroup" content="" allowMultiple="Y"> 
     <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="1328200856753" /> 
     <Value name="rsv-group-name" inheritParentAttribute="Y" type="string" data="group 2" /> 
     <Value name="rsv-user-type" inheritParentAttribute="Y" type="string" data="backup-user" /> 
     <Value name="rsv-owner" inheritParentAttribute="Y" type="string" data="" /> 
     <Key name="com.ahsay.afc.cpf.User" content="" allowMultiple="Y"> 
      <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="13279083887401" /> 
      <Value name="rsv-login-name" inheritParentAttribute="Y" type="string" data="name3" /> 
     </Key> 
     <Key name="com.ahsay.afc.cpf.User" content="" allowMultiple="Y"> 
      <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="13279083887401" /> 
      <Value name="rsv-login-name" inheritParentAttribute="Y" type="string" data="name4" /> 
     </Key> 
    </Key> 
</setting> 

想要的,正確的結果產生

group 2