Проблема преобразования XSLT с отключением выхода - PullRequest
1 голос
/ 29 декабря 2008

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

 <root> 
   <node>
     <!-- 
            <a href="mailto:some@one.com"> Mail me </a>
      -->
</node>
</root>

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

при условии, что $ href равен <a href="mailto:some@one.com"> Mail me </a>

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

но $ href все еще экранирован, в результате преобразования xslt получается <>

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

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

Ответы [ 3 ]

2 голосов
/ 30 декабря 2008

Когда часть комментария нода теряет свое особое значение - таким образом, «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:some@one.com"> Mail me </a>
1 голос
/ 11 марта 2009

Как уже упоминалось, после комментирования текст внутри больше не обрабатывается 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>

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

0 голосов
/ 30 декабря 2008

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

<?xml version="1.0" ?>
  <root>
    <institution id="1">
        <data>
        <ahrefmail>
            <!--
        <a href='mailto:ibank@abibbankuk.com' class='text'></a>
             -->
        </ahrefmail>

        <mail>
            ibank@abibbankuk.com
        </mail>
        </data>
    </institution>


    <institution id="2">
        <data>
        <ahrefmail>
            <!--
        <a href='mailto:ibank@abibbankuk2.com' class='text'></a>
        -->
        </ahrefmail>

        <mail>
            ibank@abibbankuk2.com
        </mail>
        </data>
    </institution>

</root>

в xslt я делаю

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

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

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