2017-05-25 21 views
0

my xmlの接頭辞名前空間は、ソースによって異なりますが、構造体によって異なる場合があります。接頭接頭辞名前空間の可変性とxlst

<t:DICT> 
    <t:noConsultationDuTeleservice>2015071717689S</t:noConsultationDuTeleservice> 
    <t:noAffaireDeLexecutantDesTravaux>2015/181/A</t:noAffaireDeLexecutantDesTravaux> 
</t:DICT> 

`それは "D:" である他のソースから:exempleため は、時々私は、 "T" have`接頭

名前空間を削除するために選択して、私のXSLTを適応させる方法
<d:DICT> 
    <d:noConsultationDuTeleservice>2015071717689S</d:noConsultationDuTeleservice> 
    <d:noAffaireDeLexecutantDesTravaux>2015/181/A</d:noAffaireDeLexecutantDesTravaux> 
</d:DICT> 

<xsl:value-of select ="DICT/noConsultationDuTeleservice"/>

+1

名前空間*接頭辞*を名前空間と混同しないでください。後者は、接頭辞が使用されているスコープ内の接頭辞にバインドされたURIによって識別されます。 XSLTはこれを理解しています。したがって、ソース文書は、正しいURI(XSLTも参照する)にバインドされている限り、好きな名前空間接頭辞を使用できます。それはおそらくあなたが扱っている場合ですが、もしそうでなければ、[mcve]で明確にしてください。 –

+0

私は理解しますが、これがどのように私に役立つのですか? – ericire

+0

オクラホマが似ていることを確認しました 違うプレフィックスで遊ぶ方法は? – ericire

答えて

1

コメントで述べたように、名前空間接頭辞と名前空間自体を混同してはなりません。名前空間は、主にURIで識別される抽象的なエンティティです。名前空間とそれらを識別するURIは普遍的なものです。名前空間接頭辞は文書固有のものです。単一のドキュメント内であっても、異なる名前空間接頭辞は同じ名前空間に対応している可能性があります(同じ名前空間URIにバインドされているかどうかによって判断されます)。 XSLTに対するその重要性は、特定の名前空間URIとの関連性に限定されています。

入力要素の例は、ローカル名は同じですが異なる名前空間接頭辞を使用します。これらの要素は、それぞれの接頭辞に関連付けられた名前空間宣言の範囲内になければなりません。そうでなければ、ソース文書はXML名前空間に準拠しません。さらに、両方の接頭辞に同じ意味を持つように要素名のローカル部分に依存しているという事実は、実際には接頭辞が同じ名前空間に関連付けられていると主張するアサーションです。

XSLTは、XPathの経由ではなく、文書中に文字通り登場修飾名ではなく、むしろその可能性が-nullの名前空間のURI、地元からなるペアを命じている彼らの拡大名前、によってノードに一致します修飾された名前の一部。したがって、入力文書の異なる名前空間接頭辞は無関係です。重要なのは、各プレフィックスがバインドされている名前空間URIです。

一方、XSLTは拡張名でノードを照合するため、ソース文書の要素名が属するnull以外の名前空間を考慮する必要があります。 XSLT 1.0では、スタイルシートにその名前空間の名前空間接頭辞を宣言して、それらの名前に関係する式が表示されるスコープにし、適切に接頭辞付きの名前を式に使用することでこれを行います。

<d:root xmlns:d="http://some.organization.com/Namespace"> 
<d:DICT> 
    <d:noConsultationDuTeleservice>2015071717689S</d:noConsultationDuTeleservice> 
    <d:noAffaireDeLexecutantDesTravaux>2015/181/A</d:noAffaireDeLexecutantDesTravaux> 
</d:DICT> 
</d:root> 

あなたはこのようなXSLTを記述することがあります:このソース文書を与え例えば

ごとに異なる接頭辞を使用して入力文書用にも同様に動作します
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ns="http://some.organization.com/Namespace"> 

    <xsl:template match="ns:root"> 
    <noConsultation> 
     <xsl:value-of select="ns:DICT/ns:noConsultationDuTeleservice"/> 
    </noConsultation> 
    </xsl:template> 

</xsl:stylesheet> 

<t:root xmlns:t="http://some.organization.com/Namespace"> 
<t:DICT> 
    <t:noConsultationDuTeleservice>2015071717689S</t:noConsultationDuTeleservice> 
    <t:noAffaireDeLexecutantDesTravaux>2015/181/A</t:noAffaireDeLexecutantDesTravaux> 
</t:DICT> 
</t:root> 
+0

それは同じxsltで動作していないようだと私はここに投稿する理由です 私は他の応答で説明します – ericire

+0

それは今すぐ動作します。 名前空間のバージョンが異なっていて、動作しなかったことに気付かなかった。 名前空間からuriのバージョンを抽出して、それが私のxsltのものと比較して進化しているかどうかを調べる必要があります。 – ericire

+0

merci /ありがとう – ericire

関連する問題