小编Pet*_*ras的帖子

如何在XSLT中实现"if else if else"条件

是否有可能在xsl中实现"if else,if else"?例如,我有数据:

<document>
    <line>
        <name>MAR111</name>
        <value>1</value>
    </line>

    <line>
        <name>MAR111</name>
        <value>3</value>
    </line>
    <line>
        <name>MEA111</name>
        <value>1</value>
    </line>
    <line>
        <name>MPR111</name>
        <value>1</value>
    </line>
    <line>
        <name>MEA111</name>
        <value>4</value>
    </line>
    <line>
        <name>MPR111</name>
        <value>2</value>
    </line>
</document>
Run Code Online (Sandbox Code Playgroud)

我需要获得三个具有三个名称的文档模板:

<document>
    <MAR>
        <name>MAR111</name>
        <number>1</number>
        <number>4</number>
    </MAR>
</document>
<document>
    <MEA>
        <name>MEA111</name>
        <number>1</number>
        <number>4</number>
    </MEA>
</document>
<document>
    <MPR>
        <name>MPR111</name>
        <number>1</number>
        <number>2</number>
    </MPR>
</document>
Run Code Online (Sandbox Code Playgroud)

我尝试在应用模板上使用"选择,何时",但也许有更好的方法:

<xsl:template match="/">
    <xsl:choose>
        <xsl:when test="/document/line/name='MEA111'">
            <xsl:apply-templates mode="MEA" select="/document"/>
        </xsl:when>
    </xsl:choose>
    <xsl:choose>
        <xsl:when test="/document/line/name='MPR111'">
            <xsl:apply-templates mode="MPR" select="/document"/>
        </xsl:when>
    </xsl:choose>
    <xsl:choose>
        <xsl:when test="/document/line/name='MAR111'">
            <xsl:apply-templates mode="MAR" select="/document"/>
        </xsl:when>
    </xsl:choose>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

xslt

21
推荐指数
3
解决办法
9万
查看次数

xsl:for-each select =:两个条件

在xsl中,我们可以在循环中为每个"写入"两个条件.例如,而不是

<xsl:when test="/document/line[
                   (substring(field[@id='0'], 1,3)='MAR')
                ] and 
                /document/line[
                   contains(substring(field[@id='0'],123,4),'0010')
                ]">
Run Code Online (Sandbox Code Playgroud)

我们可以写:

<xsl:for-each select="/document/line[
                         contains(substring(field[@id='0'], 1,3),'MAR')
                      ] and 
                      /document/line[
                         contains(substring(field[@id='0'],123,4),'0010')
                      ]">
Run Code Online (Sandbox Code Playgroud)

最好的祝福

从评论更新

<xsl:for-each select="/document/line[
                         contains(substring(field[@id='0'], 1,3),'MAR') 
                         and contains(substring(field[@id='0'],123,4),'0010')
                      ]">
Run Code Online (Sandbox Code Playgroud)

xslt

4
推荐指数
1
解决办法
3万
查看次数

使用XSLT进行位置分组

我有xml,其中包含一些文档:

<document>
    <line id="0">
        <field id="0"><![CDATA[H:doc1]]></field>
    </line>
    <line id="1">
        <field id="0"><![CDATA[L:1]]></field>
    </line>
    <line id="2">
        <field id="0"><![CDATA[L:2]]></field>
    </line>
    <line id="3">
        <field id="0"><![CDATA[L:3]]></field>
    </line>
    <line id="4">
        <field id="0"><![CDATA[H:doc2]]></field>
    </line>
    <line id="5">
        <field id="0"><![CDATA[L:1]]></field>
    </line> 
</document>
Run Code Online (Sandbox Code Playgroud)

H =文档标题,L =行项目.在这个例子中,有两个H表示两个文件,它们编号为doc1和doc2.doc1有三个订单项,doc2有一个订单项.

如何使用xslt版本1转换数据以获得此结果:

<documents>
    <document>
        <header>
            <number>doc1</number>
        </header>
        <line-item>
            <line-number>1</line-number>
            <line-number>2</line-number>
            <line-number>3</line-number>
        </line-item>
    </document>
    <document>
        <header>
            <number>doc2</number>
        </header>
        <line-item>
            <line-number>1</line-number>
        </line-item>
    </document>
</documents>
Run Code Online (Sandbox Code Playgroud)

xslt

3
推荐指数
1
解决办法
316
查看次数

如何翻译引号?

我尝试translate(tag, ''', ''),但它不起作用.是否可以删除或更改符号'?

最好的祝福.

xslt

0
推荐指数
1
解决办法
3436
查看次数

标签 统计

xslt ×4