是否有可能在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) 在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) 我有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 ×4