использование переменной в определении пространства имен - PullRequest
0 голосов
/ 27 апреля 2018

Мне нужно это в моем xslt, но xmlns: s = "{$ service-uri}" не извлечено:


    <xsl:variable name="service-uri" select="'http://something/'"/>
    ...
    <xsl:template match="cxf:cxfEndpoint[last()]">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>     
        </xsl:copy>
        <cxf:cxfEndpoint 
            xmlns:s="{$service-uri}"
            endpointName="s:{$service-name}Port"
            id="{$service-name}_RemoteEndpoint"
            serviceName="s:{$service-name}"
            wsdlURL="wsdl/remote/{$service-name}.wsdl">
            <cxf:properties>
                <entry key="continuationTimeout" value="120000"/>
                <entry key="mtom-enabled" value="true"/>
                <entry key="dataFormat" value="PAYLOAD"/>
            </cxf:properties>
        </cxf:cxfEndpoint>
    </xsl:template>

Как извлечь переменную service-uri в определении пространства имен? Спасибо Zamek

1 Ответ

0 голосов
/ 27 апреля 2018

Шаблоны значений атрибутов нельзя использовать для объявлений пространства имен. Помните, что XSLT - это XML, и объявление пространства имен xmlns:x="..." должно быть понято синтаксическим анализатором XML и процессором XSLT.

В XSLT 2.0 вы можете динамически создавать узел пространства имен, используя инструкцию xsl:namespace:

<xsl:namespace name="s" select="$service-uri"/>

Если вы в 1.0, это сложнее. Вы можете сделать это, создав узел элемента в соответствующем пространстве имен:

<xsl:variable name="dummy">
  <xsl:element name="s:dummy" namespace="{$service-uri}"/>
</xsl:variable>

и затем копирование соответствующего узла пространства имен в новый элемент:

<xsl:copy-of select="exslt:node-set($dummy/*/namespace::s)"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...