在XSLT中获取特定值

时间:2015-10-21 11:22:41

标签: xml xslt xslt-1.0 xslt-2.0

我试图在使用XSLT将XML转换为XML期间从重复属性中获取特定值

假设我有这个XML:

<SessionDetails>

 <SessionId>0</SessionId>
 <SessionTitle></SessionTitle>

 <HTMLUserActivity level="info"> [b]</HTMLUserActivity> 
 <HTMLUserActivitylevel="info">The value that I take "AAA" </HTMLUserActivity>
 <HTMLUserActivity level="info"> [b]</HTMLUserActivity> 
 <HTMLUserActivity level="info"> [br]</HTMLUserActivity>

 <Message Index="2">
   <Id>0x500A</Id>
   <Type>Error</Type>
   <Meaning>Group (0000) attribute not allowed as Additional attribute</Meaning>
 </Message>

 <HTMLUserActivity Level="Info">[CR][LF][font color="#000080"]</HTMLUserActivity>
 <HTMLUserActivity Level="Info">[CR][LF][tr]</HTMLUserActivity>
 <HTMLUserActivity Level="Info">[td align="center" valign="top" class="item" colspan="3"]</HTMLUserActivity>
 <HTMLUserActivity Level="Info">[b]</HTMLUserActivity>

</Sessiondetails>

我想从属性

中获取特定值(AAA)
<HTMLUserActivitylevel="info">The value that I take "AAA" </HTMLuserActivity>

我想获得的输出只有AAA,到目前为止我试图在XSLT下创建,但我无法获得该值:

<xsl:for-each select="/SessionDetails/HTMLUserActivity">
  <xsl:if test="contains(SessionDetails/HTMLUserActivity,'AAA')">
    <xsl:variable name="testName" select = "//SessionDetails/HTMLUserActivity"/>
  </xsl:if>
</xsl:for-each>

我认为我需要使用for-eachif语句,但是如何更好地了解如何获取该值?

1 个答案:

答案 0 :(得分:0)

如果您执行以下操作:

<xsl:for-each select="/SessionDetails/HTMLUserActivity[contains(., 'AAA')]">
    <xsl:value-of select = "."/>
</xsl:for-each>

它将输出所有<HTMLUserActivity>文字内容。根据你的情况,我添加了一个只会获取相关<HTMLUserActivity>的预测。

您在原始帖子中创建的代码无法输出任何内容,因为:

  1. <xsl:for-each>会更改您正在使用的上下文节点。因此,您的条件contains(SessionDetails/HTMLUserActivity,'AAA')永远不会成立,因为您在 HTMLUserActivity 中没有任何其他标记。
  2. 你把结果放在一个变量中,不能在<xsl:for-each>的范围之外使用(除非你在for-each中删除了一些代码)