.org를 .xml로 변환하는 스크립트

.org를 .xml로 변환하는 스크립트

.org나중에 그래픽 트리를 생성할 수 있도록 파일에 작성된 트리를 일부 XML 코드로 변환 하고 싶습니다 (예:www.draw.io웹 페이지).

나무의 예

이 작업을 수행하려면 다음이 필요합니다.배쉬 스크립트.org그러면 다음이 포함된 파일이 변환됩니다 .

* tree_root
** root_node_1
*** subnode
** root_node_2

다음을 포함하는 파일 .xml:

<mxCell id="b1" value="tree_root" > </mxCell>
<mxCell id="b2" value="root_node_1" ></mxCell>
    <mxCell id="a1" source="b2" target="b1">
<mxCell id="b3" value="subnode" ></mxCell>
    <mxCell id="a2" source="b3" target="b2">
<mxCell id="b4" value="root_node_2" ></mxCell>
    <mxCell id="a3" source="b4" target="b1">

조직 모드에서 제목은 별표( *- 첫 번째 수준 제목, **- 두 번째 수준 제목 등) 로 표시됩니다.

설명하다:

  • 호출된 필드는 id상자에 나타나는 이름입니다.
  • .orgb1, b2, b3은 "box"를 나타내며 파일의 줄 번호에 따라 이름이 나열됩니다.
  • a1, a2, a3은 "화살표"를 나타내며 후속 자연수 열거의 이름입니다.
  • sourceid화살표가 시작되는 곳, 화살표가 가리키는 곳 target입니다 .id

최대 깊이가 6개인 레이어와 같은 몇 가지 간단한 사례가 필요합니다. 직접 확장하고 싶지만 시작하려면 뭔가가 필요합니다.

어떻게 해야 하나요?

답변1

어쩌면 이것이 귀하의 요구 사항을 충족할까요? 기본 아이디어는 특정 수의 별표로 시작하는 마지막 줄의 줄 번호를 실제로 보유하는 배열(레이블이라고 함)을 갖는 것입니다. 별 수를 2개 이상 늘렸지만 감소된 개수가 올바르게 처리되면 잘못된 그래프가 생성됩니다. 물론 제목 아래의 텍스트는 전혀 처리하지 않습니다.

#!/bin/bash

typeset -a labels
typeset -i node=1

while read -r stars rest
do
    level=${#stars}
    labels[level]=$node
    printf '<mxCell id="b%d" value="%q" ></mxCell>\n' $node "$rest"
    case $level in
    (1) ;;
    (*) printf '    <mxCell id="a%d" source="b%d" target="b%d">\n' $((node-1)) $node ${labels[level-1]} ;;
    esac
    : $((node++))
done

관련 정보