удалить атрибут xmlns из узла префикса пространства имен - PullRequest
2 голосов
/ 07 июля 2010

Я пытаюсь использовать XSLT для создания Edge Side Включает html-блоки.

Вот пример XSLT

<xsl:stylesheet version="1.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:esi="http://www.edge-delivery.org/esi/1.0" 
                exclude-result-prefixes="xsl esi">

    <xsl:output method="html" 
                media-type="text/html" 
                version="1.0" 
                encoding="UTF-8" 
                indent="no" 
                omit-xml-declaration="yes"/>

    <xsl:template match="/">
        <esi:vars>
            <xsl:text>some text goes here</xsl:text>
        </esi:vars>
    </xsl:template>

</xsl:stylesheet>

Пока преобразование работает само по себе, вывод выглядит так:

<esi:vars xmlns:esi="http://www.edge-delivery.org/esi/1.0">some text goes here</esi:vars>

Проблема в том, что атрибут xmlns: esi ужасно нарушает выполнение ESI. Если я удаляю атрибут вручную (например, открываю HTML и удаляю его, снова сохраняя блок кода), все работает нормально.

Вопрос: Как я могу удалить xmlns: esi из вывода HTML? Я пытался включить его в префиксы exclude-results-, но не получилось.

Пример вывода, который будет работать:

<esi:vars>some text goes here</esi:vars>

Ответы [ 3 ]

2 голосов
/ 07 июля 2010

При любом входе эта таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="/">
    <xsl:text>&lt;esi:vars></xsl:text>
        <xsl:text>some text goes here</xsl:text>
    <xsl:text>&lt;/esi:vars></xsl:text>
</xsl:template>

</xsl:stylesheet>

Результат:

<esi:vars>some text goes here</esi:vars>

Примечание : Для плохо сформированного вывода вы можете использовать DOE илиТолько сериализация TEXT.

2 голосов
/ 07 июля 2010

Вопрос: Как я могу удалить xmlns: esi из вывода HTML?Я пытался включить его в префиксы exclude-results-prefixes, но не сработало.

XSLT с методом вывода xml не может создать некорректно сформированный XML.

Когда объявление пространства имен удаляется вручную, префикс "esi:" не привязывается ни к какому пространству имен, и весь документ, таким образом, становится не правильно сформированным.

Согласно ESISpec., Пространство имен esi обычно должно быть объявлено в верхнем элементе (<html>) документа .

Попробуйте это :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:esi="http://www.edge-delivery.org/esi/1.0">
<xsl:output indent="no" omit-xml-declaration="yes"/>

<xsl:template match="/">
   <html xmlns:esi="http://www.edge-delivery.org/esi/1.0">
    <esi:vars>
        <xsl:text>some text goes here</xsl:text>
    </esi:vars>
    </html>
</xsl:template>

</xsl:stylesheet>

, который производит :

<html xmlns:esi="http://www.edge-delivery.org/esi/1.0">
    <esi:vars>some text goes here</esi:vars>
</html>
1 голос
/ 11 августа 2010

Я нашел профессиональный способ сделать это. Правильный ответ зависит от следующего:

<xsl:stylesheet
  version="1.0" xmlns:asp="remove"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:app="http://myNamespace.com/app" 
  exclude-result-prefixes="app">

используйте эту функцию, исключите префиксы

exclude-result-prefixes

Для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/ms256204.aspx

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