XSLT условно изменить шрифт текста - PullRequest
1 голос
/ 04 марта 2012

Для следующего xml,

         <question>     
            <bp>Suppose a file a.xml has content:</bp>
            <bp><![CDATA[<a> 1 <b> 2 <b> 3 <a> 4 </a> </b> </b> </a>]]></bp>
            <bp>What is the value of the following XPath expression:</bp>
             <bp>for $x in doc("a.xml")//a/b return $x/b/a/text()</bp>
        </question>

В файле XSLT мне нужно изменить шрифт текста, если текст между тегами xml содержит

    <![CDATA[ ]]>

Я пыталсяиспользуя следующий код,

        <xsl:for-each select="mcq:bp">
            <xsl:if test="contains(. , '<![CDATA[ ]]>')">
                 <xsl:attribute name='font-family'>courier</xsl:attribute>
                 <xsl:value-of select="."/>
            </xsl:if>
            <xsl:value-of select="."/>
            <br/>                               
            </xsl:for-each>

Но xslt ничего не отображает в браузере.

1 Ответ

1 голос
/ 04 марта 2012

Этого нельзя сделать с помощью XSLT .

В момент передачи XSLT проанализированного XML-документа нет никакой информации, содержит ли текстовый узел разделы CDATA или нет - эта лексическая деталь отбрасывается (теряется) в результате анализа XML-документа .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...