0

1 つの名前空間に異なるスキーマがある場合に、xml ファイルから xpath を使用して項目を選択するときに問題が発生します。

この有効な xml ファイルが与えられます。

<getDataAction xmlns="http://example.org/ns1">
   <getData xmlns:f4k1="http://example.org/ns2" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
      <f4k1:place xmlns:f5k1="http://example.org/ns3">
         <f4k1:city i:type="f5k1:Country" xmlns:f5k1="http://example.org/ns4">
           <f5k1:notice>Notice</f5k1:notice>
         </f4k1:city>
         <f4k1:testvillage i:nil="true">
           <f4k1:data xmlns:f5k1="http://example.org/ns5">
             <f5k1:address xmlns:d7k1="http://example.org/ns6">
               <f5k1:important>no</f5k1:important>
             </f5k1:address>
           </f4k1:data>
         </f4k1:testvillage>
      </f4k1:place>
  </getData>
</getDataAction>

選びたい

<f5k1:notice>Notice</f5k1:notice>

だから私はこれを使用しますxpath-query //f5k1:noticeが、機能しません。ns5 名前空間 (8 行目) を ns4 (4 行目) に変更すると、機能します。

これが機能する理由と、XML を変更せずに機能させるにはどうすればよいか教えていただけますか?

4

1 に答える 1

1

XPath 式は、ローカル名がで、名前空間名が環境がバインドされている名前空間で//f5k1:noticeある一連の要素として評価されます。この XPath 式を評価するために使用している環境を指定していないため、何が問題なのかを正確に言うことはできませんが、最も簡単な説明は、お使いの環境では が にバインドされていないということです。noticef5k1f5k1http://example.org/ns4

最善の解決策: 使用しているシステムの名前空間にプレフィックスをバインドする方法を学びます。

最も簡単な回避策: //*[local-name="notice" and namespace-name="http://example.org/ns4"].

于 2012-12-13T02:04:41.257 に答える