【问题标题】:XSLT for multiple elements having same nameXSLT 用于具有相同名称的多个元素
【发布时间】:2019-02-15 11:54:57
【问题描述】:

基本上我正在编写一个需要传递目录名的 xsl,输出应该返回它的所有文件名。见下面的xml结构。

    <folder>
    <directory name='a'>
    <directory name='b/c'>
    <file name ='x'>
    </file>
    </directory>
    <directory name ='v'>
    <file name='f'>
    </file>
    </directory>
    </directory>
    <directory name ='z'>
    <file name= 'c'>
        </file>
        </directory>
</folder>

例如,如果目录名=b/c,它应该返回文件名附加其目录名 b/c/x(输出)。它应该是基于目录名称的通用方式,它应该返回附加其目录名称的关联文件名。请帮助我如何为它编写 xsl

【问题讨论】:

    标签: xml unix xslt xpath xslt-2.0


    【解决方案1】:
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
        <xsl:output method="text" indent="yes"/>
        <xsl:template match="/folder">
            <xsl:for-each select="directory[@name='b/c']/file">
                <xsl:value-of select="../@name"/>/<xsl:value-of select="@name"/>
            </xsl:for-each>
        </xsl:template>
    </xsl:stylesheet>
    

    【讨论】:

    • 感谢它的工作,我现在遇到了不同的问题。我正在使用 linux 执行 xsl xsltproc --stringparam target 'b/c' ***.xsl input.xml >> sam.txt。我在 xsl 上面使用了 @name='$target' 但结果显示为空白。我使用了 $target 的选择值,它显示值 b/c 我不知道问题出在哪里
    • 从您的选择语句中删除单引号,将这个:@name='$target' 更改为:@name=$target
    • 尝试替换@name=$target。还是一样的问题
    • 嘿,我现在把目标的标准化空间放在它的工作上。谢谢你的帮助?
    【解决方案2】:

    我建议使用 xsl:value-of 祖先::目录的解决方案。

    <xsl:template match="file">
        <p>
            <xsl:value-of select="ancestor::directory/@name" separator="/"/>
            <xsl:text>/</xsl:text>
            <xsl:value-of select="@name"/>
        </p>
    
    </xsl:template>
    

    查看上述 XML 结构的结果:http://xsltransform.net/ei5PwjK

    【讨论】:

    • 更好的是,你甚至可以做到&lt;xsl:value-of select="(ancestor::directory/@name, @name)" separator="/" /&gt;
    • 感谢它的工作,我现在遇到了不同的问题。我正在使用 linux 执行 xsl xsltproc --stringparam target 'b/c' ***.xsl input.xml >> sam.txt。我在 xsl 上面使用了 @name='$target' 但结果显示为空白。我使用了 $target 的选择值,它显示值 b/c 我不知道问题出在哪里
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 2011-09-30
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    相关资源
    最近更新 更多