查找具有与模式匹配的属性的所有节点

时间:2015-04-24 09:45:17

标签: xml xpath xml-parsing

我有一个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>&amp; <Id><mic_elemA_text><mic_elemB_text>

1 个答案:

答案 0 :(得分:2)

您可以对节点应用与属性相同的方法:

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

不会产生确切的模式:mic_elem?_?????,而是:mic_elem?????。这可能就足够了,因为后一种模式足够用于按名称查找节点。