2017-06-14 4 views
0

Ich habe ein XML im folgenden Format und möchte alle Elemente zwischen Anfang und Ende erhalten. aber die Namen sind nicht definiert oder können sich ändern, also muss ich alles dazwischen bringen.JavaScript Elementtree bekomme alle Elemente zwischen bestimmten Elementen

Im Moment benutze ich Elementtree, um das XML aus String zu analysieren und Elemente zu finden. Aber ich muss mich nicht daran halten, wenn es eine bessere Alternative gibt.

+0

Diese Knoten befinden sich nicht im 'startEvent'-Knoten, sondern nur zwischen' startEvent' und 'endEvent', oder? –

Antwort

0

Nicht ganz etwas, was Sie wollen, aber vielleicht können Sie versuchen, diese

const transform = require('camaro') 

const xml = ` 
<startEvent name="Start"/> 
    <a name="something"/> 
    <b name="something"/> 
    <c name="something"/> 
    <d name="something"/> 
<endEvent name="End" /> 
` 
const result = transform(xml, { 
    list: ['//*[@name != "Start" and @name != "End"]', { 
     node_name: 'name()', 
     value_in_name: '@name' 
    }] 
}) 

console.log(JSON.stringify(result, null, 2)) 

Ausgabe

{ 
    "list": [ 
    { 
     "node_name": "a", 
     "value_in_name": "something" 
    }, 
    { 
     "node_name": "b", 
     "value_in_name": "something" 
    }, 
    { 
     "node_name": "c", 
     "value_in_name": "something" 
    }, 
    { 
     "node_name": "d", 
     "value_in_name": "something" 
    } 
    ] 
} 

Das wird nicht funktionieren, wenn viele Knoten mit dem Namen Eigentum sind. es sei denn, das Ganze, das Sie extrahieren möchten, ist unter einem eindeutigen Knotennamen.

0

Ich löste es so, nicht super elegant, aber es funktioniert:

started=false 
    xmlData.findall('./process')[0]._children.forEach(function(taskEntry){ 
     if(taskEntry.tag=="startEvent"){ 
      started=true 
     } 
     if(taskEntry.tag=="endEvent"){ 
      started=false 
     } 
     if(started==true || taskEntry.tag =="endEvent"){ 
      nodes.push(getElement(taskEntry)) 
     } 

    }) 
0

Xpath es für ya tun könnte! Es ist besonders nützlich für diese Art von Sachen in Python, vielleicht gibt es eine JavaScript-Version.

Verwandte Themen