我有一个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="%s";%s="%s"" mic_elemB_attr="%s="%s";%s="%s"" 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>
。
答案 0 :(得分:2)
您可以对节点应用与属性相同的方法:
//*[@*[starts-with(local-name(), 'mic_elem')]]
不会产生确切的模式:mic_elem?_?????
,而是:mic_elem?????
。这可能就足够了,因为后一种模式足够用于按名称查找节点。