1

私はこのようなエンティティを持つXMLを持っています:

<Entity>
    <Name>Lwresd_Dns_Server|LwresdDnsServer</Name>
 </Entity   

<Entity>
   <Name>Lwresd_Dns_Server_Data|LwresdDnsServerData</Name>
</Entity>

私のxpath式は
XPathExpression expr = xpath1.compile("//Entity[matches(Name,'" +line+ "')]");

ここで、lineは値を持つ変数ですLwresdDnsServer

上記のxpath式は両方のエンティティに一致します。最初のエンティティのみに一致する必要があります。

Lwresd_Dns_Server|LwresdDnsServer

それを行うには、式をどのようにフレーム化する必要がありますか?

4

2 に答える 2

1

私はこれがトリックを行うべきだと信じています:

XPathExpression expr = 
    xpath1.compile("//Entity[contains(concat('|', Name, '|'),'|" +line+ "|')]");

これにより、sで囲まれたエンティティ名と|sで囲まれた変数名が比較される|ため、次のようになります。

contains('|Lwresd_Dns_Server|LwresdDnsServer|', '|LwrestDnsServer|') => Yes
contains('|Lwresd_Dns_Server_Data|LwresdDnsServerData|', '|LwrestDnsServer|') => No

その結果、2つのエンティティのうち最初のエンティティのみが選択されます。

で終わるエンティティのみを検索したい場合(完全に一致するエンティティだけでなく)、これを行うことができます(値に文字が含まれないことが保証されていると仮定します-可能性がある場合は、、絶対に含まれない別の区切り文字を選択するか、この質問に対するDimitre Novatchevの回答を使用する必要があります): line$$

XPathExpression expr = 
    xpath1.compile("//Entity[contains(concat(Name, '$'),'" +line+ "$')]");

XPathでこの関数を使用したことはありませんmatches()(XPath 1.0ではサポートされていません)が、XPathエバリュエーターがサポートしている場合は、エンティティ名の末尾の値を見つけるために次の機能も機能すると思われますmatches()

XPathExpression expr = 
    xpath1.compile("//Entity[matches(Name,'" +line+ "$')]");

これ$は、文字列の終わりの正規表現記号です。

于 2013-01-24T07:16:37.027 に答える
0

XPath2.0関数の機能を実装するXPath1.0式ends-with($s, $t)次のとおりです。

substring($s, string-length($s) - string-length($t) +1) = $t

$s上記を$t特定の文字列に置き換えることができます。

于 2013-01-24T13:13:11.403 に答える