2014-09-05 84 views
1

我正在使用帶有不允許更改的XML文件的遺留代碼。以特定字符串開頭並以相關字符串結尾的節點的XPath查詢

它的節點是這樣的:

<P1StartTest Name="P1 Start Test" DevID="1" RegType="0" StartAddr="9520" DataType="6" /> 
<P2StartTest Name="P2 Start Test" DevID="1" RegType="0" StartAddr="9521" DataType="6" /> 
<P3StartTest Name="P3 Start Test" DevID="1" RegType="0" StartAddr="9522" DataType="6" /> 
<P4StartTest Name="P4 Start Test" DevID="1" RegType="0" StartAddr="9523" DataType="6" /> 
<P5StartTest Name="P5 Start Test" DevID="1" RegType="0" StartAddr="9524" DataType="6" /> 
<P1EndTest Name="P1 End Test" DevID="1" RegType="0" StartAddr="9512" DataType="6" /> 
<P2EndTest Name="P2 End Test" DevID="1" RegType="0" StartAddr="9513" DataType="6" /> 
<P3EndTest Name="P3 End Test" DevID="1" RegType="0" StartAddr="9514" DataType="6" /> 
<P4EndTest Name="P4 End Test" DevID="1" RegType="0" StartAddr="9515" DataType="6" /> 
<P5EndTest Name="P5 End Test" DevID="1" RegType="0" StartAddr="9516" DataType="6" /> 

我需要選擇與P開始節點和或有時那些以EndTest結束結束。我知道我必須使用/*[starts-with(name(), 'P')]/*[ends-with(name(), 'StartTest')],但我該如何將兩者結合?我是XPath新手。

+0

/* [開始-與(名稱(), 'P'),並結束-與(名稱(), 'StartTest')] – 2014-09-05 10:53:18

回答

3

您可以像這樣將它們組合起來(格式化的可讀性):

/*[ 
    starts-with(name(), 'P') 
     and 
    (
     ends-with(name(), 'StartTest') 
     or 
     ends-with(name(), 'EndTest') 
    ) 
    ] 

以上,與P開始,並用或EndTest結束XPath的選擇節點。或者,如果您實際上一次只需要兩個可能的節點名稱末尾中的一個,那將更容易。實施例用於與結束節點:

/*[ 
    starts-with(name(), 'P') 
     and 
    ends-with(name(), 'StartTest') 
    ]