2012-05-30 6 views
1

Я работаю над XSL-файлом, который (среди многих других) отображает кнопку, если соответствующий XML-файл содержит определенную строку. Кажется, у меня проблема, когда я получаю кнопку для отображения все время (даже если XML-файл не содержит значения, которое я хочу) или никогда (даже если файл XML содержит значение. Часть XML файл я обеспокоен является:XSL Если содержит

<sp_stList> 
<sp_st> 
<st_num>1234</st_num> 
<feanme>FAKE</feanme> 
<featyp>ST</featyp> 
<dirsuf></dirsuf> 
<dirpre></dirpre> 
<lv_apt></lv_apt> 
<mun>VAN</mun> 
<msgs> 
<msg filename="File.pdf">d:\folder1\fild.pdf</msg> 
</msgs> 
<spst_poly>0</spst_poly> 
<mes_switch>X</mes_switch> 
<cdts>20120103161202PS</cdts> 
</sp_st> 
</sp_stList> 

что должно произойти в том, что, когда <mes_switch> содержит X, то кнопка должна отображаться Если она пуста или имеет другой характер в нем, то он не должен отображаться на кнопке..

код я попытался это:

<a name="Info"></a> 
    <xsl:if "contains(sp_stList/sp_st/mes_switch, 'X'))"> 
     <a href="#SpSt" style="color:orange" t:id="Spec_Sit_hdr"> 
      <img border="0" src="./file.jpg"></img> 
     </a> 
    </xsl:if> 

По какой-то причине это не работает. Любая помощь, которую вы могли бы предоставить, была бы оценена!

Спасибо!

ответ

3
<xsl:if "contains(sp_stList/sp_st/mes_switch, 'X'))"> 

Это синтаксически незаконно XML (и, следовательно, АОТ синтаксически нелегального кода XSLT:

  1. логическое выражение, чтобы быть оценены должно быть указано в атрибуте test - такой атрибут не присутствует .

  2. Существует правая скобка, которая не имеет соответствующего левого кронштейна.

Решение: Исправление только эти две проблем приводит к рабочей коде:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 

    <xsl:template match="/"> 
     <a name="Info"></a> 
     <xsl:if test="contains(sp_stList/sp_st/mes_switch, 'X')"> 
      <a href="#SpSt" style="color:orange" id="Spec_Sit_hdr"> 
       <img border="0" src="./file.jpg"></img> 
      </a> 
     </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 

Когда это преобразование применяются на предоставленном документе XML:

<sp_stList> 
    <sp_st> 
     <st_num>1234</st_num> 
     <feanme>FAKE</feanme> 
     <featyp>ST</featyp> 
     <dirsuf></dirsuf> 
     <dirpre></dirpre> 
     <lv_apt></lv_apt> 
     <mun>VAN</mun> 
     <msgs> 
      <msg filename="File.pdf">d:\folder1\fild.pdf</msg> 
     </msgs> 
     <spst_poly>0</spst_poly> 
     <mes_switch>X</mes_switch> 
     <cdts>20120103161202PS</cdts> 
    </sp_st> 
</sp_stList> 

разыскиваемого правильный результат :

<a name="Info"/> 
<a href="#SpSt" style="color:orange" id="Spec_Sit_hdr"> 
    <img border="0" src="./file.jpg"/> 
</a> 
+0

Просто чтобы добавить к ответу Димитрия, я подозреваю, что вы хотите проверить «равно», а не «содержит». Просто потому, что вы думаете, что «элемент содержит значение» на английском языке не означает, что вам нужна функция contains(). –

+0

Спасибо вам обоим. Я попытался изменить содержимое, как указано в списке, но теперь система вообще не будет обрабатывать XML-файл. Когда я нажимаю на страницу, где должен быть отформатированный XML, отображается только код XSL. – user1424931

+0

@ user1424931: Скорее всего, вы используете * not * точно такое же преобразование на * not * точно в том же исходном XML-документе. Я всегда проверяю, что решения, которые я даю в своих ответах, работают нормально и дают именно тот результат, который я предоставляю - на самом деле я копирую и вставляю результат преобразования в ответ. Поэтому вам нужно выполнить точное преобразование из этого ответа на точный исходный XML-документ из этого ответа - вы получите тот же результат. Тогда ясно, что у вас есть дополнительные проблемы - но тот, который вы просили, полностью решен. –

Смежные вопросы