XSL и пространства имен - PullRequest
       31

XSL и пространства имен

4 голосов
/ 06 апреля 2010

Это может быть действительно простой вопрос, но его я не могу понять, и я рву на себе волосы.У меня есть следующий XML:

<?xml-stylesheet type="text/xsl" href="email.xsl"?>
<Example xmlns="">
  <Name xmlns="urn:rnb.fulfilment.bus.contracts.public.exampleBookName.v1">Mark</Name>
</Example>

И я пытаюсь использовать следующий XSLT:

<xsl:stylesheet 
  version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
   <xsl:template match="/">
    <html>
      <body>
        <table width="90%" border="0" cellpadding="0" cellspacing="0">
          <tr>
            <td>
              <p>AUTOMATED CONFIRMATION: This confirmation email is unable to take replies. For further assistance please visit our Help pages or Contact us</p>
              <p>Dear <xsl:value-of select="Name"/>,</p>
              <p>Thank you for blah blah... </p>
            </td>
          </tr>
        </table>
        <xsl:apply-templates/>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Я не могу получить имя, отображаемое при использовании xmlns=urn:rnb.fulfilment.bus.contracts.public.exampleBookName.v1 вКанал XML, когда я удаляю xmlns, имя отображается нормально.

Есть ли какой-то синтаксис, который мне не хватает?Я попытался добавить пространство имен к элементу <xsl:stylesheet>:

<xsl:stylesheet 
  version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:rpg="urn:rnb.fulfilment.bus.contracts.public.exampleBookName.v1"
>

Затем, используя префикс, который я дал XSLT в выражении XPath:

<xsl:value-of select="Name"/>

Но это не тактоже не работает.Кто-нибудь может помочь?Заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 06 апреля 2010

Ваш подход с объявлением пространства имен на <xsl:stylesheet> уже был верным направлением. Теперь все, что вам нужно сделать, это использовать также префикс:

<xsl:value-of select="Example/rpg:Name" />

Я также рекомендую внести небольшие изменения в ваш шаблон, чтобы лучше отражать ваш вклад:

<xsl:template match="Example">
  <!-- ... -->
  <xsl:value-of select="rpg:Name" />
</xsl:template>
4 голосов
/ 06 апреля 2010

Вам необходимо использовать то же пространство имен в XSLT, чтобы выражение XPath для Name соответствовало.

<xsl:value-of select="x:Name" xmlns:x="urn:rnb.fulfilment.bus.contracts.public.exampleBookName.v1"/>
0 голосов
/ 06 апреля 2010

В качестве альтернативы используйте предикат и local-name (). E.g.:

<xsl:value-of select="*[local-name() = 'Name']"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...