XSLT получает нежелательные значения - PullRequest
2 голосов
/ 29 января 2011

XML:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE UploadXML SYSTEM "ex_v222.dtd">
    <UploadXML><Version>1.1</Version>
<Properties>
<Property>
<IntegratorID>3232321</IntegratorID>
<IntegratorPropertyID>12312312-3</IntegratorPropertyID>
<IntegratorOfficeID>1231231231</IntegratorOfficeID>....

по какой-то причине следующий XSL-файл всегда получает значение 1.1 и помещает его перед элементом envelop:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:param name="Z">2312</xsl:param>
    <xsl:param name="A">KKK</xsl:param>
    <xsl:output method="xml" encoding="utf-8" indent="yes" />
        <xsl:strip-space elements="*" />

        <xsl:template match='/UploadXML/Properties'> 
        <Envelope>
        <Body>
        <add_adverts>
        <xsl:apply-templates select='Property'/>
        </add_adverts>
        </Body>
        </Envelope>
        </xsl:template>

.... (Я считаю, что реализация шаблона не важна ..)

Что я получаю:

<?xml version="1.0" encoding="utf-8"?>
1.1<Envelope xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <Body>
    <add_adverts>
      <advert>

. , .

Видите, что там 1,1? Зачем? есть идеи?

Ответы [ 2 ]

6 голосов
/ 29 января 2011

Вы видите это, потому что это поведение по умолчанию XSLT для узла, который не соответствует ни одному шаблону. Чтобы специально не копировать содержимое элемента Version, вы можете просто использовать пустой шаблон:

<xsl:template match="Version"/>
2 голосов
/ 29 января 2011

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

Наблюдаемое поведение обусловлено встроенным шаблоном XSLT для текстового узла, который просто копирует его:

<xsl:template match="text()|@*">
  <xsl:value-of select="."/>
</xsl:template>

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

<xsl:template match="Version/text()"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...