XML 상위 노드의 특성을 하위 노드의 값으로 바꿉니다.

XML 상위 노드의 특성을 하위 노드의 값으로 바꿉니다.

상위 노드의 텍스트를 하위 노드의 일부 텍스트로 바꾸려는 xml 파일이 있습니다. 다음은 xml의 예입니다.

<output name="Element_152">
  <field name="NAME" key="true">Unit001</field>
  <field name="ITEM">CommStatus</field>
</output>
<output name="Element_153">
  <field name="NAME" key="true">Unit001</field>
  <field name="ITEM">UnitStatus</field>
</output>

<output name="Element_...">속성 값을 의 값으로 변경하고 싶으 <field name="ITEM">므로 다음을 얻게 됩니다.

<output name="CommStatus">
  <field name="NAME" key="true">Unit001</field>
  <field name="ITEM">CommStatus</field>
</output>
<output name="UnitStatus">
  <field name="NAME" key="true">Unit001</field>
  <field name="ITEM">UnitStatus</field>
</output>

감사합니다

답변1

  • Ctrl+H
  • 무엇을 찾다:(<output name=").+?(?=">(?:(?!</output>).)+<field name="ITEM">(.+?)</field>)
  • 다음으로 교체:$1$2
  • 확인하다 성냥갑
  • 확인하다 줄 바꿈
  • 확인하다 정규식
  • 확인하다 . matches newline
  • Replace all

설명:

(<output name=")            # literally, group 1
.+?                         # 1 or more any character, not greedy
(?=                         # positive lookahead, make sure we have after:
    ">                          # literally
    (?:                         # non capture group, Tempered Greedy Token
        (?!</output>)               # negative lookahead, make sure we haven't <:output> after
        .                           # any character
    )+                          # end group, must appear 1 or more times
    <field name="ITEM">         # literally
    (.+?)                       # group 2, 1 or more any character, not greedy
    </field>                    # literally
)                           # end lookahead

대사:

$1      # content of group 1 (<output name=")
$2      # content of group 2 (the value of ITEM)

스크린샷(이전):

여기에 이미지 설명을 입력하세요

스크린샷(이후):

여기에 이미지 설명을 입력하세요

관련 정보