2016-05-05 34 views
0

私はジョブのXMLを持っており、特定のジョブ・セットのジョブ・タイトルに一致するジョブをフィルタリング/除外するXPath 1.0 Queryを作成しようとしています。 - 以下である複数の潜在的な値に一致するノードを除外するXPath

/jobs/job[Title[not(contains(text(),'Senior') or contains(text(),'Head Of Finance') or contains(text(),'Manager'))]]

タイトル「財務部長」まだ表示されてすなわち、「シニア」「監査シニア」が、仕事と雇用を除外するように表示されます。ここでは

は私のXPathですXMLのスニペット:

<?xml version="1.0" encoding="utf-8" ?> 
<jobs> 
    <job> 
    <JobId>3706463</JobId> 
    <Category><![CDATA[Health ]]></Category> 
    <Views>0</Views> 
    <Apps>0</Apps> 
    <Title><![CDATA[Head of Finance]]></Title> 
    <JobTitleFacet><![CDATA[Finance Manager ]]></JobTitleFacet> 
    <Hours><![CDATA[Full Time ]]></Hours> 
    <ExperienceLevels><![CDATA[PQ]]></ExperienceLevels> 
    </job> 
    <job> 
    <JobId>3706459</JobId> 
    <Views>0</Views> 
    <Apps>0</Apps> 
    <Title><![CDATA[Audit Senior]]></Title> 
    <JobTitleFacet><![CDATA[Audit ]]></JobTitleFacet> 
    <ExperienceLevels><![CDATA[PQ]]></ExperienceLevels> 
    </job> 
    <job> 
    <job> 
    <JobId>334</JobId> 
    <Views>0</Views> 
    <Apps>0</Apps> 
    <Title><![CDATA[Something Else]]></Title> 
    <JobTitleFacet><![CDATA[Audit ]]></JobTitleFacet> 
    <ExperienceLevels><![CDATA[PQ]]></ExperienceLevels> 
    </job> 
    <job> 
</jobs> 

私は何が欠けていますか?

+3

XSLTをとXPathは大文字と小文字が区別されるので、「ヘッド(大文字の「O」)は「財務責任者」(小文字の「o」)と同じではありません。 –

+0

SMH!ありがとうございました!選択の一部として大文字小文字を区別しない方法がありますか?私はあなたに正しいと印を付けることができるようにQに答えること自由に感じなさい! – cman77

+0

フォローアップ - '/ jobs/job [Title(not(contains(text()、 'Senior')や(text()、 'Head of')やcontains(text ()、 'Manager')))] | /仕事/仕事[ExperienceLevels [normalize-space()= 'エントリーレベル'またはnormalize-space()= 'PQ'またはnormalize-space()= 'NQ']] ' – cman77

答えて

2

これは、XSLTとXPathで大文字と小文字が区別されるため、 "Head of Finance"(大文字の "Of"は "Finance"の頭字語と同じではありません)ケース "o")。

XPATH 1.0を使用している場合は、translate関数を使用して大文字を小文字に変換することに限定されています。

この....

/jobs/job[Title[not(
    contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrsuvwxyz') ,'senior') 
    or contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') ,'head of finance') 
    or contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') ,'manager'))]] 

注意してください:XPath 2.0のでは、あなたがこのような何かを書くことができる場合があります。

jobs/job[Title[not(matches(text(), '(Senior)|(Head Of Finance)|(Manager)', 'i'))]]" 
関連する問題