【问题标题】:XSLT - Document function and matching for display purposesXSLT - 用于显示目的的文档功能和匹配
【发布时间】:2011-03-25 20:27:36
【问题描述】:

这是我的用户 xml:(users.xml)

<?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 中并且 &lt;a:hassite&gt; 值等于 'false' 显示单词“活动” '。

谁能给我一些建议?

【问题讨论】:

    标签: xslt xslt-1.0


    【解决方案1】:

    节点集比较只是为了这个:

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

    【讨论】:

      【解决方案2】:

      以下样式表:

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

      应用于users.xml 时产生以下输出:

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

      根据口味调整最终输出格式。

      【讨论】:

        猜你喜欢
        • 2011-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多