向第一个孩子添加id属性

詹潘

我有一个XML文档,如果没有创建,我需要获取id属性的值(如果存在),然后将值分配给元素的第一次出现。我能够获取Field元素并设置一个新的id,但是在下一个其他设置中,如果刚设置的id属性被覆盖。我如何指定元素首次出现时为其他所有子代分配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
dbasnett

使用XElement

    Dim xe As XElement
    ' xe=XElement.Load("path here")
    'for testing use a literal
    xe = <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 ie As IEnumerable(Of XElement)

    'get all isolationProcedureEnd
    ie = From el In xe...<isolationProcedureEnd> Select el

    'increment id
    For Each f As XElement In ie
        Dim IDAttr As XAttribute = f.Attribute("id")
        If IDAttr Is Nothing Then
            Stop 'NO id Attribute
        Else
            Stop 'has id Attribute
        End If
    Next

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据属性选择第一个孩子

来自分类Dev

将元素添加为第一个孩子

来自分类Dev

生第一个孩子

来自分类Dev

div的第一个孩子

来自分类Dev

第一个孩子的选择

来自分类Dev

向类添加第一个虚拟函数

来自分类Dev

如何在第一个孩子中选择第一个孩子

来自分类Dev

CSS:有班级的孩子的第一个孩子

来自分类Dev

AutomationPeer.GetChildrenCore() 只向 VisualStudio.TestTools 报告第一个孩子

来自分类Dev

在第一个孩子和下一个孩子样式中添加CSS?

来自分类Dev

添加第二个div后,第一个孩子倒下了

来自分类Dev

jQuery获取Sibillings第一个孩子的名字属性

来自分类Dev

将CSS添加到已命名的第一个孩子

来自分类Dev

jQuery:第一个孩子(没有ID或类)

来自分类Dev

获取类的第一个孩子的ID,然后触发该事件的onclick事件

来自分类Dev

如何通过使用子元素的ID选择父对象的第一个孩子?

来自分类Dev

从同一个班级中选择第一个孩子并添加班级名称

来自分类Dev

如何获得第一个标头孩子?

来自分类常见问题

Flexbox中的第一个孩子全角

来自分类Dev

DIV上的第一个孩子选择无效

来自分类Dev

祖父母的第一个孩子

来自分类Dev

针对CSS课后的第一个孩子

来自分类Dev

使用第一个孩子和之前的CSS

来自分类Dev

:ng-repeat的第一个孩子

来自分类Dev

祖先CSS的第一个孩子

来自分类Dev

CSS:第一个孩子的伪元素

来自分类Dev

多个表的CSS第一个孩子

来自分类Dev

选择第一个孩子以外的奇数元素

来自分类Dev

JSoup获得div的第一个孩子