2011-07-29 9 views
0

.netでは、以下のxsltが正しいです。exclude-result-prefixes = "xmlns"

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" 
exclude-result-prefixes="table xmlns"> 

が、私はサクソン使用している場合はJavaで、

exclude-result-prefixes="xmlns" 

は、次のエラーが生成されます。XSLで

エラー:worksheets.xslのライン52上のスタイルシート: XTSE0165:名前空間を接頭辞xmlnsが宣言されていない

+0

'は無効です。 –

+0

申し訳ありませんが、 'table'は実際には存在しますが、単純化のために書きませんでした。 – guhai

+2

' xmlns'を除外して何をしようとしているのかを教えてください。あなたが避けようとしているものを除外しないとどうなりますか? –

答えて

0

xmlnsをexclude-result-prefixesに含めるとエラーになります.Xml仕様では、xmlnsを宣言しません。明示的amespace接頭辞は:

The prefix xmlns is used only to declare namespace bindings and is by definition bound to the namespace name http://www.w3.org/2000/xmlns/ . It MUST NOT be declared . Other prefixes MUST NOT be bound to this namespace name, and it MUST NOT be declared as the default namespace. Element names MUST NOT have the prefix xmlns.

したがって、それが有効な接頭辞ではありませんので、exclude-result-prefixes内のxmlnsを含めることには意味がありません。詳細については、http://www.w3.org/TR/xml-names/#ns-decl

+1

'xmlns =" http://schemas.openxmlformats.org/spreadsheetml/2006/main "'はドキュメントのデフォルト名前空間を宣言しているだけです。引用した仕様のセクションはここでは適用されません。 http://www.w3.org/TR/xml-names/#defaulting –

+0

を参照してください。ms office 2007では、xmlns = "http://schemas.openxmlformats.org/spreadsheetml/2006/main"が存在します。 – guhai

+0

しかしsaxon(java)のデフォルトの名前空間を除外する方法は? – guhai

3

まず、どの製品のかなりドライ質問は権利です。 XSLT 1.0仕様では、exclude-result-prefixesについて、「exclude-result-prefixes属性またはxsl:exclude-result-prefixes属性を持つ要素のプレフィックスにバインドされている名前空間がない場合はエラーです。要素の「束縛された」(範囲内の)要素は、XPathデータモデルhttp://www.w3.org/TR/xpath/#namespace-nodesで定義されているとおりです。これを読めば、接頭辞「xmlns」に範囲内バインディングが存在しないことがわかります。 XPath 2.0では、「名前空間ノードの名前はxmlnsでなくてはならず、文字列値はhttp://www.w3.org/2000/xmlns/」でなくてはなりませんが、これは実質的な変更ではなく、明確化のためのものです。

ここで、達成しようとしていることを達成するためのより興味深い質問です。私はあなたが達成しようとしていることを実際に私たちに語ったとは思わない。いくつかの回答は、exclude-result-prefixes = "#default"があなたの問題を解決すると推測していますが、それをアドバイスする前に、あなたの問題が何かを知りたいと思います。