用XML替换InnerText的一部分

时间:2014-12-03 03:40:54

标签: xml vb.net

我正在使用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,但它并不总是意味着它没有孩子。

1 个答案:

答案 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
相关问题