2015-06-10 4 views
0

Я пытаюсь проверить, существует ли элемент HTML в XSLT, но не может заставить его работать. Я в настоящее время пытается присвоить переменной на основе того, может ли он найти так:Выражение XSLT для проверки наличия HTML-элемента

<xsl:variable name="TestParaText"> 
     <xsl:choose> 
      <xsl:when test="contains(smf:body,index[@id='testSpan'])"> 
       <xsl:value-of select="'Element found'"/> 
      </xsl:when> 

      <xsl:otherwise> 
       <xsl:value-of select="'Element Not Found'"/>      
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:variable> 

В пределах моего HTML у меня есть это:

<span id="testSpan" style="display:none"></span> 

Я не хочу, чтобы элемент был виден, так что я установили атрибут стиля, но я уверен, что это что-то связано с моим слабым синтаксисом xpath/XSLT! Извиняюсь, поскольку я не очень хорошо разбираюсь в этой теме, но, надеюсь, я должен предоставить достаточную информацию для кого-то, кто мог бы мне помочь. Благодаря

HTML Body

+0

Пожалуйста, есть пример ввода XML. –

+0

Прошу прощения, я не знаю, как это получить. Я использую инструмент для генерации тела, который по существу является текстовым редактором, который генерирует HTML, и я просто поместил там тег span. Если я помещаю значение внутри элемента, которое он выводит, поэтому я знаю, что он есть, его просто как я ссылаюсь на идентификатор HTML-элемента в теле – Wingmiester

+0

** 1. ** Пожалуйста, разместите свой входной XML ** как код ** , а не как изображение, чтобы мы могли использовать его для тестирования. При необходимости используйте шаблон * identity transform * для его получения. - ** 2. ** XSLT очень зависит от контекста, и вы показываете только свою изолированную часть. Невозможно точно ответить на ваш вопрос, не зная, где вы находитесь, в тот момент, когда вам нужно применить этот тест. –

ответ

0

contains функция работает со строками. Если вы хотите проверить, содержит ли smf:body узел index[@id='testSpan']. Вы должны иметь что-то вроде этого:

<xsl:when test="body[descendant::index[@id='testSpan2']]"> 
+0

Спасибо за это, хотя он по-прежнему не работает с использованием этого синтаксиса. Знаете ли вы о других способах ссылки на элемент? – Wingmiester

+0

Возможно, это из-за пространств имен. Можете ли вы опубликовать созданное тело? –

+0

Извините, его немного мало (я, очевидно, изменил его на testSpan2) – Wingmiester

0

Если ниже ур XML

ВХОДА XML:

<span id="testSpan" style="display:none"></span> 

XSL:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="span"> 
    <xsl:copy> 
    <xsl:choose> 

    <xsl:when test = "@id = 'testSpan'">    
      <TestParaText> 
      Exists 
      </TestParaText> 
</xsl:when> 
     <xsl:otherwise> 
    <TestParaText> 
       Doesnt Exists 
    </TestParaText> 
     </xsl:otherwise> 
     </xsl:choose> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 

ВЫВОД будет:

ВЫХОД:

<?xml version="1.0" encoding="UTF-8"?> 

<span> 

<TestParaText> 
      Exists 
</TestParaText> 

</span> 

Пожалуйста, поделитесь ур запрос XML и ожидаемые результаты

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