2

contains を使用して要素を検索しようとしています。問題は、文字列に単一引用符または二重引用符が 1 つ含まれていると、取得するのが難しいことです。この xpath を使用して、最初の要素に直接一致させています。ここで「and」ステートメントを使用せずに実装するより良い方法はありますか?

使用される Xpath :-

.//*[local-name()='GEOGRAPHY_TITLE'][contains(.,"APAC > Andaman Islands > test&'<,")and contains(., '"123')]

使用される XML :-

<MST>
<MST_GEOGRAPHY >
               <GEOGRAPHY_TITLE>APAC &gt; Andaman Islands &gt; test&amp;'&lt;,\"123</GEOGRAPHY_TITLE>
               <GEOGRAPHY_ID>5a7a24ec-93ff-8be6-7ef9-fa021500df0e</GEOGRAPHY_ID>
               <TENANT_ID>{0559cdcb-c63b-4c81-be91-b78e831bf5a5}</TENANT_ID>
               <ACTIVE>1</ACTIVE>
</MST_GEOGRAPHY>
<MST_GEOGRAPHY >
               <GEOGRAPHY_TITLE>APAC &gt; Andaman Islands &gt; test\"123&amp;'&lt;,\"123</GEOGRAPHY_TITLE>
               <GEOGRAPHY_ID>5a7a24ec-93ff-8be6-7ef9-fa021500df0e</GEOGRAPHY_ID>
               <TENANT_ID>{0559cdcb-c63b-4c81-be91-b78e831bf5a5}</TENANT_ID>
               <ACTIVE>1</ACTIVE>
</MST_GEOGRAPHY>
<MST_GEOGRAPHY >
               <GEOGRAPHY_TITLE>hi</GEOGRAPHY_TITLE>
               <GEOGRAPHY_ID>5a7a24ec-93ff-8be6-7ef9-fa021500df0e</GEOGRAPHY_ID>
               <TENANT_ID>{0559cdcb-c63b-4c81-be91-b78e831bf5a5}</TENANT_ID>
               <ACTIVE>1</ACTIVE>
</MST_GEOGRAPHY>
</MST>
4

2 に答える 2

0

これはスタイルの問題かもしれませんが、おそらく XPath を次のように書き換えます。

//*:GEOGRAPHY_TITLE[contains(., "APAC > Andaman Islands > test&'<,")][contains(., '"123')]

このように、要素の選択は関数の評価ではなく絶対的かつ静的でありlocal-name、これはより効率的であることが証明されるはずです。AND制約の方法として複数の述語を使用することに既に慣れているので、'and' キーワードではなく、contains に複数の述語を使用することも賢明だと思われます。通常 (必ずというわけではありませんが)、最も選択的な述語を最初に配置すると、選択性の最も低い述語を最初に配置するよりもパフォーマンスが向上します。

于 2014-12-23T12:42:29.267 に答える