Использование XElement, которое я считаю проще. Сначала данные
Dim xe As XElement
' xe=XElement.Load("path here")
'for testing use a literal
xe = <content>
<faultIsolation>
<faultIsolationProcedure applicRefId="test" id="-1">
<isolationStep id="i1-001">
<isolationStepQuestion></isolationStepQuestion>
<isolationStepAnswer>
<yesNoAnswer>
<yesAnswer nextActionRefId="s1-003"/>
<noAnswer nextActionRefId="e1-002"/>
</yesNoAnswer>
</isolationStepAnswer>
</isolationStep>
<isolationProcedureEnd id="e1-002">
</isolationProcedureEnd>
<isolationStep id="i1-001a">
</isolationStep>
<isolationProcedureEnd id="e1-007">
</isolationProcedureEnd>
</faultIsolationProcedure>
<faultIsolationProcedure applicRefId="test" id="">
<isolationProcedureEnd id="e1-007">
</isolationProcedureEnd>
</faultIsolationProcedure>
</faultIsolation>
</content>
Обратите внимание, что я добавил одну faultIsolationProcedure.
Затем, используя эти данные, можно увеличить идентификатор id следующим образом:
Dim ie As IEnumerable(Of XElement)
'get all faultIsolationProcedure
ie = From el In xe...<faultIsolationProcedure> Select el
'increment id
For Each f As XElement In ie
Dim idv As Integer = 0
If Integer.TryParse(f.@id, idv) Then
f.@id = (idv + 1).ToString
Else
Dim att As XAttribute = f.Attribute("id")
If att IsNot Nothing Then
f.@id = "1"
End If
End If
Next