1

次の xml の違いは何ですか?

私が尋ねる理由は、xml を BPEL プロセスに送信すると、最初と 2 番目のプロセスは機能するが、最後のプロセスは機能しないためです。何が起こっているのでしょうか?

<!-- imported namespace referenced with prefix -->
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:fxd="http://aaa.yy.zz/Foo">
     <soap:Body>
         <fxd:GSR>
             <aaa>
                 <a>1000000</a>
                 <c>UUU</c>
                 <cp>ZZ</cp>
             </aaa>
             <bbb>
                 <cc>CCC</cc>
                 <v>110005632501</v>
             </bbb>
             <adate>2009-11-04T07:14:44.5814828+02:00</adate>
             <bdate>2009-11-04T07:14:44.5814828+02:00</bdate>
             <m>NNNN</m>
             <p>SSSS</p>
             <r>LLLL</r>
         </fxd:GSR>
     </soap:Body>
    </soap:Envelope>        

<!-- inline imported namespace referenced with a prefix-->
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <soap:Body>
         <fxd:GSR xmlns:fxd="http://aaa.yy.zz/Foo">
             <aaa>
                 <a>1000000</a>
                 <c>UUU</c>
                 <cp>ZZ</cp>
             </aaa>
             <bbb>
                 <cc>CCC</cc>
                 <v>110005632501</v>
             </bbb>
             <adate>2009-11-04T07:14:44.5814828+02:00</adate>
             <bdate>2009-11-04T07:14:44.5814828+02:00</bdate>
             <m>NNNN</m>
             <p>SSSS</p>
             <r>LLLL</r>
         </fxd:GSR>
     </soap:Body>
</soap:Envelope>


<!-- inline namespace -->
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <soap:Body>
           <GSR xmlns="http://aaa.yy.zz/Foo">
               <aaa>
                   <a>1000000</a>
                   <c>UUU</c>
                   <cp>ZZ</cp>
               </aaa>
               <bbb>
                   <cc>CCC</cc>
                   <v>110005632501</v>
               </bbb>
               <adate>2009-11-04T07:14:44.5814828+02:00</adate>
               <bdate>2009-11-04T07:14:44.5814828+02:00</bdate>
               <m>NNNN</m>
               <p>SSSS</p>
               <r>LLLL</r>
           </GSR>
       </soap:Body>
</soap:Envelope>

私の直感では、特に同じ wsdl からのものであることを考えると、それらは xml の同等の部分であると言えます。それらは正常に解析されますが、要素の名前空間は本来あるべきものではありません。

4

2 に答える 2

2

それらは等しくありません。つまり、例 1 と 2 は同じですが、3 は違います。

<fxd:GSR>と対照的に見てください<GSR>。ご覧のとおり、最初のものにはプレフィックスが付いています。ここで、 namespace を定義すると、xmlns:fxd=""同じ接頭辞が付いたすべての要素がこの名前空間に設定されます。他のすべて (接頭辞がまったくない要素を含む) は、この名前空間にはありません。

次に、3 番目の例では、プレフィックスのないすべての要素の名前空間を定義します。これは、GSR のプレフィックスのない子が、1 と 2 の以前の名前空間ではなく、突然、祖先と同じ名前空間にあるという事実につながります。null

編集:ちょっとした説明:

xmlns:fxd="http://aaa.yy.zz/Foo"

「fxd:」で始まるすべての要素の名前空間を「http://aaa.yy.zz/Foo」に設定します。

xmlns="http://aaa.yy.zz/Foo"

名前にコロンを含まないすべての要素の名前空間を " http://aaa.yy.zz/Foo " に設定します(= プレフィックスは付けません)。

1 と 2 を 3 のように動作させたい場合は、追加するだけです

xmlns="http://aaa.yy.zz/Foo"

最初の接頭辞のない要素が発生する前のどこか。逆の方法が必要な場合は、名前空間に含めたくないすべての要素の前に「bar:」などを付けて、これをどこかに追加する必要があります。

xmlns:bar=""

したがって、null 名前空間に明示的に設定します (最初の 2 つの例のように)。

于 2009-11-18T08:30:42.257 に答える
0

最後のサンプルでは、​​GSR 要素に囲まれたすべての要素を fxd 名前空間に入れませんか? 最初の 2 つのサンプルでは、​​GSR 要素で囲まれた要素は fxd 名前空間にありません。

したがって、最後のサンプルは最初の 2 つのサンプルとは異なると言えます。

于 2009-11-18T08:28:18.113 に答える