Проблема преобразования XSLT с отключением экранирования вывода

У меня есть xml, в котором я сохранил некоторые html под комментариями, подобными этому

 <root> 
   <node>
     <!-- 
            <a href="mailto:[email protected]"> Mail me </a>
      -->
</node>
</root>

теперь в моем коде Transform Xslt я даю XPathNavigator, который указывает на узел, а в xslt я передаю значение комментария в качестве параметра.

предполагая, что $ href <a href="mailto:[email protected]"> Mail me </a>

в xslt я делаю <xsl:value-of select="$href" disable-output-escaping="yes">

но $ href все еще экранирован, результат преобразования xslt выдает ‹›

Кто-нибудь знает, что с этим не так, любая помощь в этом отношении будет очень приветствоваться.

Спасибо, С уважением, Азим


person zeemz    schedule 29.12.2008    source источник


Ответы (3)


Когда часть комментария является частью комментария, узел теряет свое особое значение - таким образом, "href" не является узлом, поэтому вы не можете использовать его для выбора материала.

Вы можете выбрать такие комментарии:

<xsl:template match="/">
<xsl:value-of select="/root/node/comment()" disable-output-escaping="yes"/>
</xsl:template>

Это приведет к созданию на основе вашего ввода XML:

cristi:tmp diciu$ xsltproc test.xsl test.xml 
<?xml version="1.0"?>

        <a href="mailto:[email protected]"> Mail me </a>
person diciu    schedule 30.12.2008

Как упоминал diciu, после комментария текст внутри больше не анализируется XML.

Одно из решений этой проблемы - использовать двухпроходный подход. Один проход, чтобы извлечь закомментированный узел <a href=""></a> и поместить его в обычный XML, и второй проход, чтобы обогатить данные желаемым результатом: <a href="">Your Text Here</a>.

Второй, однопроходный подход заключается в том, чтобы извлечь нужный текст из комментария (в данном случае адрес электронной почты) с помощью регулярного выражения (или, в нашем случае, просто извлекая из XML), а затем создать вокруг него необходимую разметку. .

<xsl:template match="ahrefmail/comment()">
    <xsl:element name="a">
        <xsl:attribute name="href" select="../../mail"/>
        <xsl:attribute name="class" select="'text'"/>
        <xsl:text>Mail Me!</xsl:text>
    </xsl:element>
</xsl:template>

Предполагается, что у вас уже есть шаблон удостоверения.

person Jon W    schedule 11.03.2009

Я пробовал то, что вы только что сказали, не сработало, xml, который я использую,

<?xml version="1.0" ?>
  <root>
    <institution id="1">
        <data>
        <ahrefmail>
            <!--
        <a href='mailto:[email protected]' class='text'></a>
             -->
        </ahrefmail>

        <mail>
            [email protected]
        </mail>
        </data>
    </institution>


    <institution id="2">
        <data>
        <ahrefmail>
            <!--
        <a href='mailto:[email protected]' class='text'></a>
        -->
        </ahrefmail>

        <mail>
            [email protected]
        </mail>
        </data>
    </institution>

</root>

в xslt я делаю

где $ id передается как параметр == 1, узел ahrefmail по-прежнему экранируется с помощью lt & gt

Спасибо, С уважением, Азим

person zeemz    schedule 30.12.2008