Изменение файла SVG с помощью XSLT - PullRequest
0 голосов
/ 08 июля 2011

Я довольно новичок в XSLT и использовал его только для некоторых базовых преобразований XML в HTML.В настоящее время я пытаюсь создать руководство по запчастям на основе XML-материала, используя XSLT.Во время этого процесса мне нужно создать копию файла SVG и внести некоторые изменения в вывод.Однако я не могу заставить свой XSLT скопировать или вывести содержимое исходного SVG.

Вот фрагмент кода XML, который я пытаюсь проанализировать:

<Assembly>
  <Item HPN="1234567" Rev="0" Desc="Assembly" Dwg="7654321" DwgRev="8">
</Assembly>

В моем XSLT у меня есть следующий код, чтобы прочитать имя файла для SVG и сделать его копию:

<xsl:template match="Assembly/Item">
    <xsl:variable name="Dwg"><xsl:value-of select="@Dwg"/></xsl:variable>
    <xsl:variable name="DwgRev"><xsl:value-of select="@DwgRev"/></xsl:variable>
    <xsl:if test="not(@Dwg = preceding::Item/@Dwg)">
        <xsl:call-template name="SVGConversion">
            <xsl:with-param name="Dwg" select="$Dwg"/>
            <xsl:with-param name="DwgRev" select="$DwgRev"/>
        </xsl:call-template>
    </xsl:if>
</xsl:template>

Шаблон SVGConversion сохраняется в отдельной таблице стилей XSLT, которая была импортированав основную таблицу стилей.Возможно, в этом нет необходимости, но меня беспокоит метод вывода.

<xsl:output method="xml" indent="no" media-type="image/svg"/>
<xsl:template name="SVGConversion">
    <xsl:param name="Dwg"/>
    <xsl:param name="DwgRev"/>
    <xsl:variable name="SVGCall">document('Drawings/<xsl:value-of select="$Dwg"/>_<xsl:value-of select="$DwgRev"/>.svg')</xsl:variable>
    <xsl:result-document encoding="UTF-8" indent="yes" href="{$ProjectPath}/App/Graphics/{$Dwg}_{$DwgRev}.svg">
        <xsl:apply-templates select="$SVGCall"/>
    </xsl:result-document>
</xsl:template>

Этот код создает файл SVG с правильным именем файла в месте вывода, но он пуст.Как скопировать код из исходного SVG в новый файл SVG, имея в виду, что я также хочу вносить изменения в части кода SVG во время обработки?

Я пытался использовать, а такжезахватить содержимое файла SVG, но получил те же результаты.

Может также помочь узнать, что я использую парсер Kernow 1.6.1.Не уверен, что это часть проблемы.

Буду признателен за любой совет, который кто-либо может предложить.

Ответы [ 2 ]

0 голосов
/ 09 июля 2011

Полагаю, вам следует добавить правило преобразования идентификаторов XSLT, которое будет копировать все узлы по умолчанию:

http://en.wikipedia.org/wiki/Identity_transform#Using_XSLT

Без такого правила узлы XML, которые не соответствуют правилу, будут просто игнорироваться.

0 голосов
/ 08 июля 2011

Я думаю, что вместо <xsl:variable name="SVGCall">document('Drawings/<xsl:value-of select="$Dwg"/>_<xsl:value-of select="$DwgRev"/>.svg')</xsl:variable> вы просто хотите <xsl:variable name="SVGCall" select="document(concat('Drawing/', $Dwg, '_', $DwgRev, '.svg'))"/>.

И пока вы это делаете, измените что-то вроде <xsl:variable name="Dwg"><xsl:value-of select="@Dwg"/></xsl:variable> на <xsl:variable name="Dwg" select="@Dwg"/>.

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