Атрибут XSLT, совпадающий с пространствами имен - PullRequest
1 голос
/ 02 сентября 2011

Я не могу найти хорошее объяснение, почему второй пример здесь работает, но первый не работает:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xsd"
    version="2.0">

  <xsl:template match="/">

    <xsl:value-of select="/wsdl:definitions/wsdl:message[@name = $messageName]"/>
    <xsl:value-of select="/wsdl:definitions/wsdl:message/@name[. = $messageName]"/>

  </xsl:template>

</xsl:stylesheet>

Контекст находит конкретное именованное сообщение в документе WSDL.Я подозреваю, что это как-то связано с пространством имен почти во всем, что меня сильно смущает с помощью XSLT, но я не понимаю, почему?решение, поскольку оно не ведет к пониманию.

следующие разделы WSDL:

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/">

   <message name="retrieveCustomerYtdResponse">
      <part name="parameter"/>
   </message>
   <message name="retrieveCustomerYtdRequest"/>

</definitions>

1 Ответ

0 голосов
/ 02 сентября 2011

Нет проблем с пространствами имен.Оба выражения верны и дают ожидаемый результат.

Предполагается (как минимум) шаблон контекста для инструкций, с первой инструкцией, которую вы пытаетесь распечатать, текстовые узлы потомки wsdl: message с указанным @ name .Ничего не будет распечатано, так как текст внутри этого элемента отсутствует.

Вторая инструкция выведет значение @ name .Это правильно.

...