首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何遍历多个XML输入文件并将相关属性值复制到HTML输出表中的一行

如何遍历多个XML输入文件并将相关属性值复制到HTML输出表中的一行
EN

Stack Overflow用户
提问于 2018-05-25 01:51:47
回答 1查看 40关注 0票数 1

我试图遍历几个输入文件,在HTML输出文件中创建一个表,其中每一行对应一个评论,但我无法获得相应的@Date值并将其复制到表的相应单元格中。任何帮助都将不胜感激。

XML输入文件

文件1

代码语言:javascript
复制
<review rid="id_001" date="2018-03-20">
    <pc pid="pc_001">
        <result>...</result>
    </pc>
    <pc pid="pc_002">
        <result>...</result>
    </pc>
</review>

文件2

代码语言:javascript
复制
<review rid="id_002" date="2018-05-19">
    <pc pid="pc_001">
        <result>...</result>
    </pc>
    <pc pid="pc_002">
        <result>...</result>
    </pc>
</review>

所需的HTML输出

代码语言:javascript
复制
<!-- @pid value outside the table as header. --> 
<table>    
    <tr>
        <td>Review ID</td>
        <td>Date</td>
        <td>Result</td>
    </tr>
    <tr>
        <td>001</td>
        <td>2018-03-20</td>
        <td>...</td>
    </tr>
        <td>002</td>
        <td>2018-05-19</td>
        <td>...</td>
    </tr>
</table>

XSLT

代码语言:javascript
复制
<xsl:variable name="files" select="collection('../?select=*.xml')"/>
<xsl:template match="/">
<!-- @pid value outside the table as header. --> 
    <table>
        <tr>
            <td>Review ID</td>
            <td>Date</td>
            <td>Result</td>
        </tr>
        <xsl:if test="$files">          
            <xsl:for-each select="distinct-values($files/review/@rid)">
                <xsl:variable name="currentRid" select="distinct-values($files/review/@rid)"/>            
                <xsl:variable name="currentPid" select="distinct-values($files/review/pc/@pid)"/> 
                <tr>
                    <td>                  
                        <xsl:value-of select="."/>
                    </td>
                    <td>
                        <xsl:for-each select="distinct-values($files/review/@date)">                     
                            <xsl:value-of select="."/>
                        </xsl:for-each>
                    </td>
                    <td>
                        <xsl:value-of select="distinct-values($files/review[@rid=$currentRid]/pc[@pid=$currentPid]/result)"/>
                    </td>
                </tr>
            </xsl:for-each>
        </xsl:if>      
        </tr>
    </table>
</xsl:template>
EN

回答 1

Stack Overflow用户

发布于 2018-05-25 02:26:48

问题是您试图遍历所有review元素的@date值。将for-each表达式限制为与current() rid匹配的review元素,就像您在下一个xsl:value-of表达式中所做的那样,可以得到所需的输出。所以改变吧

代码语言:javascript
复制
<xsl:for-each select="distinct-values($files/review/@date)">

代码语言:javascript
复制
<xsl:for-each select="distinct-values($files/review[@rid=current()]/@date)">  

我不能估计xsl:for-each是否是必要的-这取决于更大的图景-但也许下面的表达式就足够了

代码语言:javascript
复制
<xsl:value-of select="$files/review[@rid=current()]/@date"/>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50515383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档