2015-04-24 4 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. –

Смежные вопросы