If statement 与x27之间的差异;其中';和';如果';在XSLT脚本中

If statement 与x27之间的差异;其中';和';如果';在XSLT脚本中,if-statement,xslt,where,If Statement,Xslt,Where,我是XML/XSLT新手,对于和在语句末尾添加where=“x”之间的区别,我有点困惑 下面是一些示例数据和两个XSLT版本的代码。我在这里尝试了两种方式:但是没有出现任何结果,所以我可能做错了什么。有人能帮我澄清一下吗 <?xml version="1.0"?> <Tests xmlns="http://www.adatum.com"> <Test TestId="0001" TestType="CMD"> <Name&

我是XML/XSLT新手,对于
和在语句末尾添加
where=“x”
之间的区别,我有点困惑

下面是一些示例数据和两个XSLT版本的代码。我在这里尝试了两种方式:但是没有出现任何结果,所以我可能做错了什么。有人能帮我澄清一下吗

 <?xml version="1.0"?>  
 <Tests xmlns="http://www.adatum.com">  
   <Test TestId="0001" TestType="CMD">  
     <Name>Convert number to string</Name>  
     <CommandLine>Examp1.EXE</CommandLine>  
     <Input>1</Input>  
     <Output>One</Output>  
   </Test>  
   <Test TestId="0002" TestType="CMD">  
     <Name>Find succeeding characters</Name>  
     <CommandLine>Examp2.EXE</CommandLine>  
     <Input>abc</Input>  
     <Output>def</Output>  
   </Test>  
   <Test TestId="0003" TestType="GUI">  
     <Name>Convert multiple numbers to strings</Name>  
     <CommandLine>Examp2.EXE /Verbose</CommandLine>  
     <Input>123</Input>  
     <Output>One Two Three</Output>  
   </Test>  
   <Test TestId="0004" TestType="GUI">  
     <Name>Find correlated key</Name>  
     <CommandLine>Examp3.EXE</CommandLine>  
     <Input>a1</Input>  
     <Output>b1</Output>  
   </Test>  
   <Test TestId="0005" TestType="GUI">  
     <Name>Count characters</Name>  
     <CommandLine>FinalExamp.EXE</CommandLine>  
     <Input>This is a test</Input>  
     <Output>14</Output>  
   </Test> 
 </Tests>
使用ifstatement进行编码

 <?xml version="1.0" encoding="UTF-8"?>
 <xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
   <xsl:for-each select="Tests/Test">
     <xsl:if test="@TestType='CMD'">
       <xsl:value-of select="current()">
     </xsl:if>
   </xsl:for-each>
 </xsl:template>
 </xsl:stylesheet


对于
xsl:for each

你的意思是被称为a,它由

因此,从

<xsl:for-each select="Tests/Test" where="@TestType='CMD'">
  <xsl:value-of select="current()">
</xsl:for-each>



这应该可以解决问题。

每个
xsl:for-each的属性是no
where
你的意思是被称为a,它由

因此,从

<xsl:for-each select="Tests/Test" where="@TestType='CMD'">
  <xsl:value-of select="current()">
</xsl:for-each>



这应该可以了。

太棒了,谢谢!我只是假设where子句变红了,所以它很好:P我以后肯定会使用它:)您可能想注意到在
select
表达式中使用谓词和在
xsl:for each
的主体中使用
xsl:if
:在第一种情况下
position()
只对所选节点进行计数,在第二种情况下,它会对所有节点进行计数。@zx485每次检查是否可以在a中有多个[]位?比如:
ODM/ODM/Study/MetaDataVersion[@MetaDataVersion=$MetaDataVersion]/CodeList[@OID=$varIEItem]/CodedValue=$varIEval]/Decode/TranslatedText
?@user10626943:可以。你为什么不自己试试呢?你应该看到它一直在工作(假设语法正确)。它对我不起作用,但我不确定问题是什么,只是想排除这种可能性:)太棒了,谢谢!我只是假设where子句变红了,所以它很好:P我以后肯定会使用它:)您可能想注意到在
select
表达式中使用谓词和在
xsl:for each
的主体中使用
xsl:if
:在第一种情况下
position()
只对所选节点进行计数,在第二种情况下,它会对所有节点进行计数。@zx485每次检查是否可以在a中有多个[]位?比如:
ODM/ODM/Study/MetaDataVersion[@MetaDataVersion=$MetaDataVersion]/CodeList[@OID=$varIEItem]/CodedValue=$varIEval]/Decode/TranslatedText
?@user10626943:可以。你为什么不自己试试呢?你应该看到它一直在工作(假设语法正确)。它对我不起作用,但我不确定问题是什么,只是想排除这种可能性:)
<xsl:for-each select="Tests/Test[@TestType='CMD']">
  <xsl:value-of select="current()">
</xsl:for-each>