我试图在使用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-each
和if
语句,但是如何更好地了解如何获取该值?
答案 0 :(得分:0)
如果您执行以下操作:
<xsl:for-each select="/SessionDetails/HTMLUserActivity[contains(., 'AAA')]">
<xsl:value-of select = "."/>
</xsl:for-each>
它将输出所有<HTMLUserActivity>
文字内容。根据你的情况,我添加了一个只会获取相关<HTMLUserActivity>
的预测。
您在原始帖子中创建的代码无法输出任何内容,因为:
<xsl:for-each>
会更改您正在使用的上下文节点。因此,您的条件contains(SessionDetails/HTMLUserActivity,'AAA')
永远不会成立,因为您在 HTMLUserActivity 中没有任何其他标记。 <xsl:for-each>
的范围之外使用(除非你在for-each中删除了一些代码)