2009-03-17 9 views
0

XSLファイルを使用して変換しようとしているXMLファイルがあります。私のXSLのルート要素に非空白のxmlns属性を追加するとすぐに、変換によってすべての空白のデータが返されます。 xmlns属性を削除または空白化すると、私は期待したものを返す。"xmlns"属性により、XSLTで空白の値が返される

誰も私にこれがなぜ起こっているのか教えてもらえますか?

ここに私のXSLのビットが(いくつかの部分で...と置き換え&を省略)です。ここでEDIT * *

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" ... > 

    <xsl:import href="html_commonstructures.xsl"/> 
    <xsl:output method="html"/> 

    <xsl:template match="/"> 
    <div> 
    <xsl:call-template name="ServiceStructure"> 
     <xsl:with-param name="structure" select="ServiceDescription" /> 
    </xsl:call-template> 
    </div> 
    </xsl:template> 

    <xsl:template name="ServiceStructure"> 
    <xsl:param name="structure"/> 
    <h3> 
     <xsl:value-of select="$structure/DC.Title" /> (<xsl:value-of select="$structure/DC.Identifier" />) 
    </h3> 
    <!-- And so on --> 
    </xsl:template> 
</xsl:stylesheet> 

html_commonstructuresに何の抜粋です:

<?xml version='1.0' encoding='UTF-8' ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:rxr="http://ilrt.org/discovery/2004/03/rxr/" xmlns:esd="http://www.esd.org.uk/standards" 
    xmlns:core="http://www.govtalk.gov.uk/core" xmlns:n2="http://www.govtalk.gov.uk/metadata/egms" 
    xmlns:apd="http://www.govtalk.gov.uk/people/AddressAndPersonalDetails" 
    xmlns:con="http://www.govtalk.gov.uk/people/ContactTypes" 
    xmlns:bs7666="http://www.govtalk.gov.uk/people/bs7666"> 

    <!-- A template for the ControlledListStructures --> 
    <xsl:template name="ControlledListStructure"> 
    <xsl:param name="structure"/> 

    <p class="controlledlist"> 
     <xsl:value-of select="$structure/text()" /> 
     <xsl:if test="$structure/@Id | $structure/@ConceptId | $structure/@ItemName | $structure/@ListName"> 
     <span class="metainfo">[ 
      <xsl:if test="$structure/@Id"> 
      ID: <xsl:value-of select="$structure/@Id" />; 
      </xsl:if> 
      <xsl:if test="$structure/@ConceptId"> 
      Concept ID: <xsl:value-of select="$structure/@ConceptId" />; 
      </xsl:if> 
      <xsl:if test="$structure/@ItemName"> 
      Item Name: <xsl:value-of select="$structure/@ItemName" />; 
      </xsl:if> 
      <xsl:if test="$structure/@ListName"> 
      List Name: <xsl:value-of select="$structure/@ListName" /> 
      </xsl:if> 
      ] 
     </span> 
     </xsl:if> 
    </p> 
    </xsl:template> 
</xsl:stylesheet> 
+0

私は思う*私はインポートの競合からこの種のものを見てきました。あなたもhtml_commonstructures.xslを提供できますか? – annakata

答えて

4

なぜ最初にxmlns名前空間定義を追加しますか?

xmlns属性を追加すると、XSLTのデフォルト名前空間が変更されます。すべての式を入力文書の名前空間を使用するように調整する必要があります。つまり、空白の接頭辞を使用して入力文書の名前空間の定義を追加し、たとえば、 'myPrefix:SerciveDescription'という表現の 'ServiceDesription'。

+0

私は変換しようとしているXMLは第三者から来ているので、名前空間などの制御はあまりありません。しかし、入力のために助けてください - 私はすべてを助けるために物事をrejigできますか? –

2

XMLドキュメントに名前空間がある場合は、XSLTに同じ名前空間が必要です。