Проблема с XSLT и пространствами имен - PullRequest
3 голосов
/ 27 марта 2009

Я новичок в XSLT, поэтому на этот вопрос можно было ответить и в другой раз. Я искал, но ничего не нашел: (

Мне нужно разобрать XML как этот

<ns1:tagName1>
    <ns2:tagName2>
          This is the content
    </ns2:tagName2>       
</ns1:tagName1>

И я использую этот XSL для этого

<xsl:template match="ns1:tagName1">
    <resultns1>
        <xsl:if test="ns2:tagName2">
            <resultns2>
                <xsl:value-of select=".">
            </resultns2>
        </xsl:if>
    </resultns1>
</xsl:template>

Результат, который я ожидаю, равен

<resultns1>
    <resultns2>
        This is the content
    </resultns2>       
</resultns1>

но вместо этого я получаю

<resultns1/>

Если оба тега используют одно и то же пространство имен, все работает должным образом, но если внешний тег находится в ns1, а внутренний - в ns2, то внутренний не определяется. Есть какие-нибудь подсказки, почему это происходит?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 27 марта 2009

у меня нормально работает; XML:

<?xml version="1.0" encoding="utf-8" ?>
<xml xmlns:ns1="foo" xmlns:ns2="bar">
  <ns1:tagName1>
    <ns2:tagName2>
      This is the content
    </ns2:tagName2>
  </ns1:tagName1>
</xml>

XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ns1="foo" xmlns:ns2="bar"
    exclude-result-prefixes="ns1 ns2"
>
  <xsl:template match="/xml">
    <xsl:apply-templates select="*"/>
  </xsl:template>

  <xsl:template match="ns1:tagName1">
    <resultns1>
      <xsl:if test="ns2:tagName2">
        <resultns2>
          <xsl:value-of select="."/>
        </resultns2>
      </xsl:if>
    </resultns1>
  </xsl:template>
</xsl:stylesheet>

Результат:

<?xml version="1.0" encoding="utf-8"?>
<resultns1>
  <resultns2>
    This is the content
  </resultns2>
</resultns1>
1 голос
/ 27 марта 2009

XSLT должен объявить те же пространства имен, что и XML-файл. Возможно, ваше объявление ns2 немного отличается между двумя файлами? Будьте особенно осторожны с такими вещами, как регистр букв (он чувствителен к регистру) и косые черты и тому подобное. Строки пространства имен должны точно соответствовать.

Если это не поможет, возможно, вы могли бы опубликовать полный файл XML и XSLT, который демонстрирует вашу проблему?

0 голосов
/ 27 марта 2009

Ой!

при подготовке полного XML и XSLT я понял, что пространства имен в обоих файлах относятся к разным схемам :(

Итак, хотя они используют одно и то же имя, использование разных схем делает их разными

Большое спасибо, что указали мне правильное направление:)

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