2017-08-08 59 views
0

我認爲這個問題是很清楚的,但這裏有一個例子:尋找最大屬性XPath 1.0中受到附加約束

<?xml version="1.0"?> 
<Root> 
    <Criterion> 
     <Name>A</Name> 
     <Value>1</Value> 
    </Criterion> 
    <Criterion> 
     <Name>C</Name> 
     <Value>3</Value> 
    </Criterion> 
    <Criterion> 
     <Name>D</Name> 
     <Value>4</Value> 
    </Criterion> 
    <Criterion> 
     <Name>B</Name> 
     <Value>2</Value> 
    </Criterion> 
</Root> 

我很新的這一點,但其他的答案我知道怎麼找該標準具有最大值:

//Root/Criterion[not(../Criterion/Value > Value)] 

這給了我

<Criterion> 
    <Name>D</Name> 
    <Value>4</Value> 
</Criterion> 

正如預期的那樣。但是我希望能夠添加額外的約束條件,例如「查找具有小於3的最高值的標準」。對於這個例子,我希望它返回

<Criterion> 
    <Name>B</Name> 
    <Value>2</Value> 
</Criterion> 

,因爲這包含不大於3。我已經試過了好像他們的工作,但他們都沒有一些想法的最高值;我希望我可以用一個或兩個命令來完成。有沒有人知道這樣做的簡單方法?不幸的是,我使用的是VBA,因此我僅限於使用XPath 1.0,並且根據示例,元素不一定按任何特定順序排序。

回答

0

只需添加另一個條件謂詞

//Root/Criterion[Value <= 3 and not(../Criterion/Value > Value)] 
+0

感謝邁克爾。那是我的第一個想法,但它不起作用;但我認爲這證明它與我在VBA而不是XPath命令中調用它有關。如果沒有第二種情況代碼工作,只要我添加它抱怨的第二個條件。看起來我需要深入瞭解VBA文檔。再次感謝您的回答。 – user6282181

+0

不要告訴我們「它不工作」或「它抱怨」 - 告訴我們它是如何失敗的。這樣,我們有機會幫助你。 –

+0

我現在花了一些時間研究VBA錯誤,我得到了,事實證明,當我添加第二個條件,沒有得到返回。似乎這兩個條件一起應用都沒有,因爲整個集合的最大值不小於或等於3(它是4)。我認爲我想要做的是應用<= 3條件,然後將最大條件應用於結果,而不是試圖將它們應用於同一集合。不過,我不確定如何構建該命令。 – user6282181