我正在使用visual studio 2010在VB中编写程序。我试图用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
不完全是我正在寻找的。
有人可以帮我吗?我基本上只想替换最内在的文本。
注意:我使用XmlDocument
,请不要提供答案,例如将整个xml转换为String并执行简单的String.Replace。
谢谢!
编辑:
抱歉,我没有说清楚。
tagA
中有更多子女,tagA
可能是另一个tagA
的孩子。
我正在寻找更多内心tagA
,但它并不总是意味着它没有孩子。
答案 0 :(得分: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