【问题标题】:I need to loop this using XSLT code?我需要使用 XSLT 代码循环这个吗?
【发布时间】:2017-11-26 07:25:09
【问题描述】:

我很难循环这个。

XML 代码:

    <ProcessData>
    <Messages>
        <MessageIds/>
        <MessageNames>
            <MessageName>tpname1_abc.txt</MessageName>                
            <MessageName>tpname2_def.txt</MessageName>
            <MessageName>tpname3_pqr.txt</MessageName>
            <MessageName>tpname4_xyz.txt</MessageName>
        </MessageNames>
    </Messages>
</ProcessData>

XSLT 代码:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:template match="/">
    Invalid File Received for Enrollments Inbound process in mailbox /sftptps/enrollments/deadletter


                <xsl:for-each select="/ProcessData/Messages/MessageNames/MessageName">
                      Username: <xsl:value-of select="substring-before(/ProcessData/Messages/MessageNames/MessageName/text(),'_')"/>       File Name:<xsl:value-of select="substring-after(/ProcessData/Messages/MessageNames/MessageName/text(),'_')"/>

                        <xsl:text>&#xd;</xsl:text>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

这是我目前的输出:

Invalid File Received for Enrollments Inbound process in mailbox /sftptps/enrollments/deadletter



                      Username: tpname1       File Name:abc.txt
                      Username: tpname1       File Name:abc.txt
                      Username: tpname1       File Name:abc.txt
                      Username: tpname1       File Name:abc.txt

我需要它是这样的:

Invalid File Received for Enrollments Inbound process in mailbox /sftptps/enrollments/deadletter



                      Username: tpname1       File Name:abc.txt
                      Username: tpname2       File Name:def.txt
                      Username: tpname3       File Name:pqr.txt
                      Username: tpname4       File Name:xyz.txt

我在这里做错了什么?我确定我缺少一些东西来循环它。

【问题讨论】:

    标签: xml loops xslt foreach


    【解决方案1】:

    你已经在那里了——不要从头开始。变化:

    <xsl:value-of select="substring-before(/ProcessData/Messages/MessageNames/MessageName/text(),'_')"/>
    

    到:

    <xsl:value-of select="substring-before(.,'_')"/>
    

    和:

    <xsl:value-of select="substring-after(/ProcessData/Messages/MessageNames/MessageName/text(),'_')"/>
    

    到:

    <xsl:value-of select="substring-after(.,'_')"/>
    

    您现在拥有的选择所有 MessageName 节点,从文档的根开始,并且 - 在 XSLT 1.0 中 - 返回第一个的值。

    【讨论】:

    • 如何将其转换为表格格式?两列,1. 用户名 2. 文件名?
    • “表格格式”可能意味着很多事情。请发布您想要获得的确切结果(作为代码)。
    猜你喜欢
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 2019-10-08
    相关资源
    最近更新 更多