2009-03-27 33 views
3

私はXSLTを初めて使用しているので、この質問は別の時間に回答されている可能性があります。私が検索したが、私は何も見つかりませんでした:(XSLTとネームスペースの問題

私はその

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

私が期待した結果、このXSLを使用して、この

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

そして、私のようなXMLを解析する必要があります、私が得ることのすべては、

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

ではなく、それのです

<resultns1/> 

両方のタグが同じ名前空間を使用する場合、すべてが期待通りに機能しますが、外側のタグがns1で内側のタグがns2の場合、内側のタグは検出されません。なぜこれが起こっているのかについての手がかりは?

ありがとうございます!

答えて

4

私にとってはうまくいきます。 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

XSLTは、XMLファイルと同じ名前空間を宣言する必要があります。おそらく、あなたのns2宣言は2つのファイルの間で若干異なるでしょうか?文字の場合(大文字と小文字が区別されます)や後続のスラッシュなどのようなものについては、特に注意してください。名前空間文字列は正確に一致する必要があります。

これで解決できない場合は、問題のあるXMLとXSLTファイルを投稿してください。

0

痛いです!

私は両方のファイルに名前空間が異なるスキーマを参照していることを実現し、完全なXMLとXSLTを準備している間:(

を、彼らは同じ名前を使用altoughtので、異なるスキーマを使用することにより

彼らは違うありがとう正しい方向に私を向けるために非常に:)

+0

同じように別のエイリアスを使用できるはずです。 –

関連する問題