Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 获取XSLT中的特定值_Xml_Xslt_Xslt 1.0_Xslt 2.0 - Fatal编程技术网

Xml 获取XSLT中的特定值

Xml 获取XSLT中的特定值,xml,xslt,xslt-1.0,xslt-2.0,Xml,Xslt,Xslt 1.0,Xslt 2.0,在使用XSLT将XML转换为XML的过程中,我试图从重复属性中获取特定值 假设我有以下XML: <SessionDetails> <SessionId>0</SessionId> <SessionTitle></SessionTitle> <HTMLUserActivity level="info"> [b]</HTMLUserActivity> <HTMLUserActivitylevel=

在使用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>

0
[乙]
我取“AAA”的值
[乙]
[br]
0x500A
错误
组(0000)属性不允许作为附加属性
[CR][LF][font color=“#000080”]
[CR][LF][tr]
[td align=“center”valign=“top”class=“item”colspan=“3”]
[乙]
我想从属性中获取特定值(AAA)

<HTMLUserActivitylevel="info">The value that I take "AAA" </HTMLuserActivity>
我取“AAA”的值
我只想获得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>


我假设我需要对每个和
if
语句使用
,但是有没有更好的方法来获取值?

如果您执行以下操作:

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

它将输出所有的
文本内容。我添加了一个谓词,它将根据您的条件仅获取相关的

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

  • 更改您正在使用的上下文节点。因此,您的条件
    包含(SessionDetails/HTMLUserActivity,'AAA')
    将永远不会为真,因为您在HTMLUserActivity中没有任何其他标记
  • 您将结果放入一个变量中,该变量不能超出
    的范围(除非您在for each中删除了一些代码)

  • 我取的值“AAA”是文本,而不是属性。您想要检索什么?包含“AAA”的标签的全部内容?实际上我只想将AAA作为一个值,我想我应该将字符串拆分为“我所取的值”和“AAA”,所以您正在搜索“AAA”,并且您想要检索“AAA”??我想我不太清楚你的搜索条件。还有比这更复杂的吗?好吧,实际上这只是为了更多的练习,因为我对XSLT非常熟悉,并且想对XSLT中的每个和if语句进行更多的探索。我想我会改变这个问题,我需要的值仅来自包含“AAA”的标记。它不那么复杂吗?