У меня есть документ XML, и мне нужно получить значение атрибута id, если он есть, если он не создан, а затем присвоить значение первому вхождению элемента. Я могу получить элемент Field и установить новый идентификатор, но в следующий раз, если атрибут id, который я только что установил, будет перезаписан. Как бы я указал для первого вхождения элемента назначить id = "i1", все другие дочерние элементы назначить id = "s1"?
XML Образец
<isolationMainProcedure>
<isolationStep id="i-001">
<note>
<notePara>xxx xx</notePara>
</note>
<action>xxx xx<acronym id="rcm">xxx xx<acronymTerm>xxx xx</acronymTerm>xxx xx<acronymDefinition>xxx xx</acronymDefinition>xxx xx</acronym>xxx xx</action>
<isolationStepQuestion>xxx xx</isolationStepQuestion>
<isolationStepAnswer>
<yesNoAnswer>
<yesAnswer nextActionRefId="e-001" />
<noAnswer nextActionRefId="s-001" />
</yesNoAnswer>
</isolationStepAnswer>
</isolationStep>
<isolationProcedureEnd id="e-001">
<action>xxx xx<acronymTerm internalRefId="rcm">xxx xx</acronymTerm>xxx xx</action>
<action>xxx xx<dmRef>xxx xx<dmRefIdent>xxx xxxxx xx</dmRefIdent>xxx xx</dmRef>xxx xx</action>
</isolationProcedureEnd>
<isolationStep id="s-001">
<action>xxx xx</action>
<isolationStepQuestion>xxx xx</isolationStepQuestion>
<isolationStepAnswer>
<yesNoAnswer>
<yesAnswer nextActionRefId="s-002" />
<noAnswer nextActionRefId="e-002" />
</yesNoAnswer>
</isolationStepAnswer>
</isolationStep>
<isolationProcedureEnd id="e-002">
<action>xxx xx<acronym id="gcs">xxx xx<acronymTerm>xxx xx</acronymTerm>xxx xx<acronymDefinition>xxx xx</acronymDefinition>xxx xx</acronym>xxx xx<acronym id="sbs">xxx xx<acronymTerm>xxx xx</acronymTerm>xxx xx<acronymDefinition>xxx xx</acronymDefinition>xxx xx</acronym>xxx xx<acronym id="ramts">xxx xx<acronymTerm>xxx xx</acronymTerm>xxx xx<acronymDefinition>xxx xx</acronymDefinition>xxx xx</acronym>xxx xx</action>
<action>xxx xx<acronymTerm internalRefId="gcs">xxx xx</acronymTerm>xxx xx<acronymTerm internalRefId="sbs">xxx xx</acronymTerm>xxx xx<acronymTerm internalRefId="ramts">xxx xx</acronymTerm>xxx xx</action>
</isolationProcedureEnd>
</isolationMainProcedure>
Код
Dim stepLeadingZeror = stepIndex.ToString("D4")
For Each Field As XmlElement In xmldocNode.SelectNodes("isolationStep|isolationProcedureEnd")
If (Field.HasAttribute("id")) Then
Dim initExistingStep As String = Field.GetAttribute("id")
Dim newIntStepID = "Fi" + fiCount.ToString + "i-" + stepLeadingZeror
Field.SetAttribute("id", newIntStepID)
Debug.Write(vbCr + "old Step ID: " + initExistingStep + " / new Step ID " + newIntStepID)
dictionaryRenumberID.Add(initExistingStep, newIntStepID)
ElseIf Field.Name = "isolationStep" Then
For Each Attribute As XmlAttribute In Field.Attributes
If Attribute.Name = "id" Then
Dim existingStep = Field.GetAttribute("id")
newStepID = "Fi" + fiCount.ToString + "s-" + stepLeadingZeror
Field.SetAttribute("id", newStepID)
Debug.Write(vbCr + "old Step ID: " + existingStep + " / new Step ID " + newStepID)
dictionaryRenumberID.Add(existingStep, newStepID)
End If
Next
ElseIf Field.Name = "isolationProcedureEnd" Then
For Each Attribute As XmlAttribute In Field.Attributes
If Attribute.Name = "id" Then
Dim existingEndStep = Field.GetAttribute("id")
newEndStepID = "Fi" + fiCount.ToString + "e-" + stepLeadingZeror
Field.SetAttribute("id", newEndStepID)
Debug.Write(vbCr + "old End ID: " + existingEndStep + " / new End ID " + newEndStepID)
dictionaryRenumberID.Add(existingEndStep, newEndStepID)
End If
Next
End If
stepIndex += 1
Next