【问题标题】:xsl 1.0 document () reference based on variablexsl 1.0 document() 基于变量的引用
【发布时间】:2013-03-18 12:14:44
【问题描述】:

我找不到任何回答这个特定问题的现有帖子。希望对于更熟悉 XSL 的人来说这是一个简单的答案:我有一个 XSL 样式表,它应用于由零件检测软件系统生成的 XML 文件,然后读取生成的 HTML 代码....

我想添加一个外部 XML 文件,其中包含每个不同零件编号的公差。所以我想象 XSL 工作表需要使用 document() 引用,其中包含文档名称或由源 XML 文件中的元素名称定义的文档中的元素。希望包含的代码说明了我正在尝试做的事情。显然它不能按原样工作,也只是整个文件的一个 sn-p....

感谢您提供的任何帮助或指向我可以从中学习的东西的链接。

<xsl:variable name="pname">
    <xsl:value-of select="//NAME/."/>.xml
</xsl:variable>

<xsl:template match="TUBE_LRA_ERRORS">
<table border="0" style="font-size:18pt">
    <tr><th><xsl:copy-of select="//NAME/."/></th></tr>
    <tr><th><xsl:value-of select="//REPORT/REPORT_TIME"/></th></tr>
    <tr><th>LRA Errors</th></tr>
</table>
<table border="1" style="font-size:26pt">
<tr align="center" bgcolor="#cccccc">
    <td>#</td><td>L</td><td>R</td><td>A</td>
</tr>
<xsl:for-each select="ERROR">
    <tr>
        <td><xsl:value-of select="position()"/></td>
        <xsl:choose>
            <xsl:when test="X > document('$pname')/l/hi">
                <td bgcolor="00FFFF" style="font-weight:600">
            <xsl:value-of select="X"/></td>
            </xsl:when>
            <xsl:when test="X > document('tolerances.xml')/l/lo">
                <td bgcolor="ffffff" style="font-weight:200">
                    <xsl:value-of select="X"/></td>
            </xsl:when>
        <xsl:otherwise>

【问题讨论】:

    标签: xslt xslt-1.0


    【解决方案1】:

    所以您想到的是变量pname 将具有公差文件的名称,您想从中检查值吗?应该可以的。

    这不起作用:

    <xsl:when test="X > document('$pname')/l/hi">
       <td bgcolor="00FFFF" style="font-weight:600">
            <xsl:value-of select="X"/>
       </td>
    </xsl:when>
    

    因为你在引号中有“$pname”,这会导致它寻找一个称为“$pname”的文件。但是,这将加载名称为 $pname 值的文件(注意我已经删除了 $pname 周围的单引号:

    <xsl:when test="X > document($pname)/l/hi">
       <td bgcolor="00FFFF" style="font-weight:600">
            <xsl:value-of select="X"/>
       </td>
    </xsl:when>
    

    或者,如果您想使用名称为 $pname 加上“.xml”的值的文件,您可以这样做:

    <xsl:when test="X > document(concat($pname, '.xml'))/l/hi">
       <td bgcolor="00FFFF" style="font-weight:600">
            <xsl:value-of select="X"/>
       </td>
    </xsl:when>
    

    我想你这里可能有逻辑错误:

    <xsl:when test="X > document('tolerances.xml')/l/lo">
      <td bgcolor="ffffff" style="font-weight:200">
        <xsl:value-of select="X"/>
      </td>
    </xsl:when>
    

    我猜你想在X 小于 lo 值时显示特殊格式,在这种情况下你需要:

    <xsl:when test="X &lt; document('tolerances.xml')/l/lo">
    

    【讨论】:

    • 为什么,谢谢!我想这可能很简单!至于逻辑错误,它看起来只是这样,因为其余的条件格式持续了一页或三页,所以我把它省略了。再次感谢。
    猜你喜欢
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多