XSLT - 用于显示目的的文档功能和匹配

发布于 2024-10-27 15:29:00 字数 2008 浏览 0 评论 0原文

这是我的用户 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 中,并且 值等于 'false' 显示单词“active”。

谁能给我一些建议吗?

Here are is my user 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>

Here is my 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>

My XSL style sheet:

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

What Im looking to do is display the users name and userid from users.xml, then read sites.xml and if the userid is in the xml and the <a:hassite> value is equal to 'false' display the word 'active'.

Can anyone give me some tips?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冷心人i 2024-11-03 15:29:00

节点集比较就是为了这个目的:

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

Node set comparison are just for that:

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

This way, you could just use a pattern

<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>
笛声青案梦长安 2024-11-03 15:29:00

以下样式表:

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

根据需要调整最终输出格式。

The following stylesheet:

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

Produces the following output when applied to users.xml:

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

Adjust the final output format to taste.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文