2015-04-24 117 views
1

所有節點我有一個XML查找與屬性相匹配的模式

<mic_root state="mismatch"> 
    <RepoTrade state="mismatch"> 
    <TradeIds state="mismatch"> 
     <TradeId state="mismatch"> 
     <Id state="missing" /> 
     <Id1 state="added" /> 
     <Version state="mismatch"> 
      <mic_elemA_text>1</mic_elemA_text> 
      <mic_elemB_text>2</mic_elemB_text> 
     </Version> 
     </TradeId> 
     <TradeId state="mismatch"> 
     <Id state="mismatch"> 
      <mic_elemA_text>1</mic_elemA_text> 
      <mic_elemB_text>2</mic_elemB_text> 
     </Id> 
     </TradeId> 
    </TradeIds> 
    <Fixings state="mismatch"> 
     <mic_elemA_text> 
     </mic_elemA_text> 
     <mic_elemB_text>123</mic_elemB_text> 
    </Fixings> 
    <SpecificDetail state="mismatch"> 
     <DirtyBondPrice mic_elemA_attr="%s=&quot;%s&quot;;%s=&quot;%s&quot;" mic_elemB_attr="%s=&quot;%s&quot;;%s=&quot;%s&quot;" state="mismatch" /> 
    </SpecificDetail> 
    </RepoTrade> 
</mic_root> 

我需要找到所有那些有像mic_elem屬性節點?_ ?????。例如,在上面的XML中,我需要獲得DirtyBondPrice。我可以找到所有那些與代碼類似的模式是這樣的節點:

Set xmlMatches = objResultsXML.GetRootElement.ChildElementsByPath("//*[starts-with(local-name(), 'mic_elem')]") 

這讓我像<Version><mic_elemA_text><mic_elemB_text> & <Id><mic_elemA_text><mic_elemB_text>所有節點。

回答

2

可以採用同樣的方法爲屬性爲你做的節點:

//*[@*[starts-with(local-name(), 'mic_elem')]] 

不會導致精確模式:mic_elem?_?????而是:mic_elem?????。這可能就夠了,因爲後者的模式足以用於按名稱查找節點。

+0

謝謝,這就像一個魅力。不能相信我沒有嘗試過這種組合。我需要了解更多關於xpath的信息。 –