Загрузить xml-файл и отображать только вершины

Как загрузить следующий файл draw.io в mxGraphModel и отобразить только вершины, а НЕ края?

<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="www.draw.io" modified="2019-09-25T08:10:42.119Z" agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0" etag="rVOYKV4DccHE-o70O52h" version="11.3.1" pages="1">
  <diagram id="VCf34-Iv6E_k61pAP0pe" name="Page-1">
    <mxGraphModel dx="1248" dy="594" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
      <root>
        <mxCell id="0"/>
        <mxCell id="1" parent="0"/>
        <mxCell id="VXw29pc5vOmcNuhHpu7d-5" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="VXw29pc5vOmcNuhHpu7d-2" target="VXw29pc5vOmcNuhHpu7d-4">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>
        <mxCell id="VXw29pc5vOmcNuhHpu7d-7" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="VXw29pc5vOmcNuhHpu7d-2" target="VXw29pc5vOmcNuhHpu7d-6">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>

        [... some more vertices and edges ...]

      </root>
    </mxGraphModel>
  </diagram>
</mxfile>

Заранее спасибо.


person bembix    schedule 25.09.2019    source источник
comment
Пробовали загрузить? Если да, то где эта часть кода?   -  person NickAth    schedule 05.10.2019
comment
@NickAth спасибо за ваш ответ. Да, я загрузил файл и получил объект XML-документа (doc): var req = mxUtils.load(filename.xml); var doc = req.getXml(req); // xml-Document Но я понятия не имею, как продолжить   -  person bembix    schedule 07.10.2019
comment
Проверьте код ниже :)   -  person NickAth    schedule 07.10.2019
comment
Код вашего примера останавливается с ошибкой TypeError: ячейка имеет значение null   -  person bembix    schedule 07.10.2019
comment
Пожалуйста, взгляните на обновленный ответ   -  person NickAth    schedule 07.10.2019
comment
Это работает в бесконечном цикле. Может быть, что-то не так с моим xml-документом. Пожалуйста, взгляните на pastebin.com/KtW13vVB   -  person bembix    schedule 07.10.2019
comment
Извините, в моем коде была опечатка. Больше не бесконечный цикл, а пустой массив ячеек.   -  person bembix    schedule 07.10.2019
comment
Это странно, не могли бы вы опубликовать свой настоящий xml? Я не вижу вершин в загруженном вами xml   -  person NickAth    schedule 07.10.2019
comment
Файл xml, который я разместил на pastebin (см. предыдущие сообщения), является фактическим файлом. Я прав, что вершины имеют параметр vertex='1'? Если да, то в файле 5 вершин (например, последняя mxCell)   -  person bembix    schedule 07.10.2019
comment
Да, вершины имеют атрибут вершины = 1, я проверил фрагмент кода с вашим XML, и он работает, pasteboard.co/IASGBJ8 .png   -  person NickAth    schedule 07.10.2019
comment
Выглядит правильно! Не могли бы вы отправить фрагмент кода для загрузки xml-файла? Я думаю, это моя ошибка   -  person bembix    schedule 07.10.2019
comment
Нет смысла отправлять вам по почте фрагмент кода для загрузки xml-файла, таким образом, никто, кроме вас, не выиграет от вопроса, вы можете опубликовать в своем вопросе весь процесс (как вы загружаете свой файл и как вы его анализируете ), тогда, возможно, я мог бы найти, что не так   -  person NickAth    schedule 07.10.2019
comment
Извините, моя вина. Я пытаюсь загрузить свой xml-файл следующим образом: var filename = 'test1.xml'; var req = mxUtils.load(filename); var doc = req.getXml(req); // xml-Dokument   -  person bembix    schedule 07.10.2019
comment
Сначала вы должны сохранить свой xml в строковый файл, а затем выполнить код в обновленном ответе.   -  person NickAth    schedule 07.10.2019
comment
Есть ли способ сразу использовать xml-файл?   -  person bembix    schedule 07.10.2019
comment
Что именно вы имеете в виду под словом сразу?   -  person NickAth    schedule 07.10.2019
comment
Используйте его напрямую, не преобразовывая в строку   -  person bembix    schedule 07.10.2019


Ответы (2)


Хорошо, поскольку у вас есть объект doc, содержащий загруженный xml, вы можете анализировать и рисовать только вершины, используя приведенный ниже код:

let xml = '<root>...</root>'; //your xml
let doc = mxUtils.parseXml(xml);
let codec = new mxCodec(doc);
codec.decode(doc.documentElement, graph.getModel());
let elt = doc.documentElement.firstChild;
let cells = [];
while (elt != null)
{ 
    let cell = codec.decode(elt);
    if(cell != undefined){
        if(cell.vertex){
          cells.push(cell);
        }
    }

    elt = elt.nextSibling;
}

//add the vertices in the graph
graph.addCells(cells);
person NickAth    schedule 07.10.2019

В вашем примере вы обрабатываете строку. У меня не строка, а xml-файл. Как мне загрузить xml-файл и подготовить его для обработки с помощью данной функции?

Если это должна быть строка: как загрузить xml-файл и преобразовать его в строку?

person bembix    schedule 08.10.2019