2016-06-30 34 views
0

試圖拉從交通局狀態供稿一些數據 -的Xpath不起作用

<LineStatus ID="6" StatusDetails="Minor delays between Acton Town and Heathrow/Uxbridge due to an earlier faulty train at Holborn. GOOD SERVICE on the rest of the line."> 
<BranchDisruptions> 
    <BranchDisruption> 
    <StationTo ID="244" Name="Uxbridge"/> 
    <StationFrom ID="1" Name="Acton Town"/> 
    <Status ID="MD" CssClass="GoodService" Description="Minor Delays" IsActive="true"> 
     <StatusType ID="1" Description="Line"/> 
    </Status> 
    </BranchDisruption> 
    <BranchDisruption> 
    <StationTo ID="284" Name="Heathrow Terminal 5"/> 
    <StationFrom ID="1" Name="Acton Town"/> 
    <Status ID="MD" CssClass="GoodService" Description="Minor Delays" IsActive="true"> 
     <StatusType ID="1" Description="Line"/> 
    </Status> 
    </BranchDisruption> 
</BranchDisruptions> 

只需使用XPath = // @名工作摳出來的數據在我們的標牌軟件的名稱元素,但我不知道如果父節點在<BranchDisruption>之下,節點將顯示出來。嘗試了很多組合沿線,

xpath=//@Name[not(ancestor::BranchDisruption)] 

但沒有運氣。有沒有人有什麼建議?

+0

父母下面沒有屬性爲'Name'的元素 – splash58

+0

準確地寫出你想從示例中選擇的元素 – splash58

+0

嗨splash58,抱歉,讀那個回來我遺漏了一些信息。你在哪裏有Name =「Uxbridge」,這對我很有用(代碼將'Uxbridge'拉出來,但如果它位於標籤下,我不希望它工作(頁面上的代碼更多 –

回答

0

基於以下假設:它具有屬性Name的元素是BranchDisruption直接孩子總,我看到了下面的XPath的工作原理:

//@Name/parent::*/parent::*[not(name()='BranchDisruption')]/*/@Name

測試的XPath下面的xml:

<?xml version="1.0" encoding="UTF-8"?> 
<LineStatus ID="6" StatusDetails="Minor delays between Acton Town and Heathrow/Uxbridge due to an earlier faulty train at Holborn. GOOD SERVICE on the rest of the line."> 
<BranchDisruptions> 
    <BranchDisruption> 
    <StationTo ID="244" Name="Uxbridge"/> 
    <StationFrom ID="1" Name="Acton Town"/> 
    <Status ID="MD" CssClass="GoodService" Description="Minor Delays" IsActive="true"> 
     <StatusType ID="1" Description="Line"/> 
    </Status> 
    </BranchDisruption> 
    <BranchDisruption> 
    <StationTo ID="284" Name="Heathrow Terminal 5"/> 
    <StationFrom ID="1" Name="Acton Town"/> 
    <Status ID="MD" CssClass="GoodService" Description="Minor Delays" IsActive="true"> 
     <StatusType ID="1" Description="Line"/> 
    </Status> 
    </BranchDisruption> 
<Non-BranchDisruption> 
    <StationTo ID="284" Name="Heathrow Terminal 6"/> 
    <StationFrom ID="1" Name="Acton Town 7"/> 
    <Status ID="MD" CssClass="GoodService" Description="Minor Delays" IsActive="true"> 
     <StatusType ID="1" Description="Line"/> 
    </Status> 
    </Non-BranchDisruption> 
</BranchDisruptions> 
</LineStatus> 

它會給:

Attribute='Name="Heathrow Terminal 6"' Attribute='Name="Acton Town 7"'

+0

令人驚歎。感謝您的幫助。這工作。非常感激。 –

+0

@SimonCB謹慎投票?接受答案?謝謝。 – SomeDude