Проблем с XSLT трансформация с деактивиране на екранирането на изхода

Имам xml, в който съм съхранил малко html под коментари като този

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

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

ако приемем, че $href е <a href="/bgmailto:[email protected]"> Mail me </a>

в xslt правя <xsl:value-of select="$href" disable-output-escaping="yes">

но $href все още се избягва, резултатът от xslt трансформацията идва с ‹ ›

Някой знае ли какво не е наред с него, всяка помощ в това отношение ще бъде високо оценена.

Благодаря Поздрави Azeem


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="/bgmailto:[email protected]"> Mail me </a>
person diciu    schedule 30.12.2008

Както diciu спомена, веднъж коментиран текстът вътре вече не се анализира чрез XML.

Едно решение на този проблем е да се използва двуходов подход. Едно преминаване за изваждане на коментирания <a href="/bg"></a> възел и поставянето му в нормален XML и второ преминаване за обогатяване на данните с желания от вас резултат: <a href="/bg">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='/bgmailto:[email protected]' class='text'></a>
             -->
        </ahrefmail>

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


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

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

</root>

в xslt правя

където $id се предава като параметър == 1 възелът ahrefmail все още се екранира с lt & gt

Благодаря Поздрави Azeem

person zeemz    schedule 30.12.2008