2012-04-02 28 views
0

XMLファイルをJSON形式に変換するXSLTスタイルシートがあります。XMLのスキーマの一部でXMLを使用できるようになりました。これはXML形式の文字列としてエンコードするだけです。対応するJSON。XML XSLT XMLへの変換

私は要素が作成されています。OK名前空間が正しく動作するのに問題があります。

問題は、現在の要素のスコープ内のすべての単一の名前空間が単一の要素ごとに出力されていることです。私は、元のXMLで最初に宣言されている名前空間だけを出力したいだけです。

これは私が現在行っていることですが、私はいくつか試してみましたが、私が必要とすることをする方法を見つけられません。次のテンプレートで

<xsl:call-template name="elementAttributes"> 
     <xsl:with-param name="element" select="."/> 
</xsl:call-template> 

は、私が現在のノードの属性を変換するための責任があるテンプレートを呼び出す

<xsl:template name="elementAttributes"> 
     <xsl:param name="element"/> 
     <xsl:for-each select="$element/namespace::*"> 
      <!--dont include default namespace--> 
      <xsl:if test="boolean(name())"> 
       <xsl:text> </xsl:text> 
       <xsl:value-of select="name()"/> 
       <xsl:text>='</xsl:text> 
       <xsl:value-of select="."/> 
       <xsl:text>'</xsl:text> 
      </xsl:if> 
     </xsl:for-each> 
</xsl:template> 

だから、XMLを使用してインスタンスのため:

<valueString> 
     <dms:animal xmlns:dms="http://test.net/2012/dms/"> 
      <dms:dog>woof</dms:dog> 
      <dms:cat>meow</dms:cat> 
      <reptile:crocodile xmlns:reptile="http://reptile.test.net/2012/dms/"></reptile:crocodile> 
     </dms:animal> 
</valueString> 

私は次のようになります:

<dms:animal dcds='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' dms='http://test.net/2012/dms/' ns0='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' xml='http://www.w3.org/XML/1998/namespace'> 
<dms:dog dcds='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' dms='http://test.net/2012/dms/' ns0='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' xml='http://www.w3.org/XML/1998/namespace'>woof</dms:dog> 
<dms:cat dcds='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' dms='http://test.net/2012/dms/' ns0='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' xml='http://www.w3.org/XML/1998/namespace'>meow</dms:cat> 
<reptile:crocodile dcds='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' dms='http://test.net/2012/dms/' ns0='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' reptile='http://reptile.test.net/2012/dms/' xml='http://www.w3.org/XML/1998/namespace'/> 

私は基本的に同じXMLを取り戻すしたいです。

XMLを出力に簡単にコピーすることは可能ですが、私はJSON形式のために結果をテキストとして出力しているので、私はそのように動作するようにはできませんでした。ノードはコピーされ、XML構造はコピーされません。

+1

Michael Kayが正しいです。 XPath Visualizerのコードを見て、これがどのように行われているか確認してください。http://www.huttar.net/dimitre/XPV/TopXML-XPV.html –

答えて

1

あなたがしようとしているのはかなり奇妙なデザインだと思います。私の本能はすべて要件の段階に戻り、異なるデザインがより理にかなっているかどうかを調べることです。

しかし、あなたがしようとしていることを本当にやりたければ、名前空間がこの要素のスコープにあり、親要素ではない場合にのみ、それぞれの名前空間を調べて出力する必要があります。