使用XSLT从XML检索所有属性值

前端之家收集整理的这篇文章主要介绍了使用XSLT从XML检索所有属性值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我无法弄清楚如何从 XML文档访问标记中的所有属性.

假设我有以下XML:

<names>
  <name firstname="Rocky" lastname="Balboa" divider=","/>
  <name firstname="Ivan" lastname="Drago" divider=","/>
</names>

我想要以下输出
Rocky Balboa,Ivan Drago,

我现在拥有的是:

<xsl:for-each select="names/name">
   <xsl:value-of select="@firstname"/>
   <xsl:value-of select="@lastname"/>
   <xsl:value-of select="@divider"/>
</xsl:for-each>

我想知道的是,是否可以在一个选择值中执行此操作而不必执行其中三个操作.因此,为了澄清,我希望能够使用一个select值输出标记中的所有属性.这可能吗?

谢谢.

解决方法

因为我不确定使用xsl:value-of是否是一个硬性要求,或许类似下面的内容可能是你要锁定的内容.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>

    <xsl:template match="name" mode ="print" >
        <xsl:value-of select="@firstname"/>
        <xsl:text> </xsl:text>
        <xsl:value-of select="@lastname"/>
        <xsl:value-of select="@divider"/>
    </xsl:template>

    <xsl:template match="/">
        <xsl:apply-templates  select="names/name" mode="print"/>
    </xsl:template>

</xsl:stylesheet>

您可以使用< xsl:apply-templates select =“names / name”mode =“print”/>
 在您考虑过对所有属性使用一行值的任何位置.
上面的模板将生成以下输出

Rocky Balboa,

在不使用属性名称的情况下更新crate输出

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>

    <xsl:template match="name" mode ="print" >
        <xsl:for-each select="@*" >
            <xsl:if test="not(position() = last() or position() = 1)">
                <xsl:text> </xsl:text>
            </xsl:if>
            <xsl:value-of select="."/>

        </xsl:for-each>
    </xsl:template>

    <xsl:template match="/">
        <xsl:apply-templates  select="names/name" mode="print"/>
    </xsl:template>

</xsl:stylesheet>

猜你在找的XML相关文章