2014-12-03 73 views
0

我正在使用Visual Studio 2010在VB中编写程序。我试图在xml中替换文本,但我不知道如何才能做到这一点。替换XML中的部分内文本

我的xml文件看起来像这样。有不同级别的标签具有相同的名称。

<root> 
    //1st example 
    <tagA> //outer 
     <nameA>something</nameA> 
     <tagA> 
      <flagA>%replace001%</flagA> 
      <flagB>Keep this</flagB> 
     </tagA> //inner 
    </tagA> 
    <tagB> 
     some other stuff 
    </tagB> 
    //2nd example 
    <tagA> 
     %raplace002% 
    </tagA> 
</root> 

我试图通过%包围更换价值观,以及那些被保证的广告下tagA

,我写我的代码是这样的:

replaceList = {"%replace001", "%replace002%"} 
For Each str in replaceList 
    For Each node in xmlDoc.GetElementsByTagName("tagA") 
     node.InnerText = node.InnerText.Replace(str, "success") 
    Next 
Next 

但是,这引起了问题在第一个例子中,它获得了该部分的外部部分而不是内部部分,这使得Replace不完全是我正在寻找的。

有人可以帮助我吗?我基本上只想替换最内在的inntertext。

注意:我使用的是XmlDocument,请不要提供将整个xml转换为字符串并执行简单String.Replace的答案。

谢谢!

编辑:

对不起,我没有说清楚。

还有更多的孩子在tagAtagA可能是另一个孩子tagA

我在寻找更多最内在的tagA,但并不总是表示它没有孩子。

回答

1

为了获得唯一的内心最<tagA>,您可以使用SelectNodes()方法通过以下XPath作为参数:

//tagA[not(.//tagA)] 

以上的XPath意味着选择,所有<tagA>元素,文档中任何地方,它没有任何其他<tagA>子元素。更改每个循环的内部如下:

For Each node in xmlDoc.SelectNodes("//tagA[not(.//tagA)]") 
    node.InnerText = node.InnerText.Replace(str, "success") 
Next 
+0

对不起,我没有说清楚,请参阅我的编辑。 – sora0419 2014-12-03 06:11:15

+0

@ sora0419检查我更新的答案 – har07 2014-12-03 07:39:00