2015-10-21 8 views
0

Я пытаюсь получить конкретное значение из атрибута повторения в процессе преобразования XML в XML с помощью XSLTПолучить определенное значение в XSLT

Предположим, что у меня есть этот 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> 

Вывод, который я хочу получить только ААА, до сих пор я пытался создать ниже 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

* Значение, которое я беру «ААА "* - это текст, а не атрибут. Что хотели бы получить? Все содержимое тегов ' ', которые содержат« AAA »? – potame

+0

На самом деле я хочу взять только AAA в качестве значения, я думаю, что мне нужно разделить строку, между «Значение, которое я беру» и «AAA» – eng

+0

Итак, вы ищете «AAA», и хотите получить «AAA» «?? Я думаю, что я не понимаю четко ваше условие поиска. Это сложнее? – potame

ответ

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') никогда не будет так, потому что вы не». t есть любые другие теги в HTMLUserActivity.
  2. вы поставите свой результат в переменной, которая не может быть использована из объема <xsl:for-each> (если вы не удалили код внутри для-каждый)
Смежные вопросы