Получить значение атрибута из файла XML - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь получить из узла OPCUAУстановить все NodeIds UAObjectType.

Здесь это файл xml: https://github.com/OPCFoundation/UA-Nodeset/blob/master/Robotics/Opc.Ua.Robotics.NodeSet2.xml

Это код, который я использую:

 NodeName = select("//ns1:UAObjectType/ns1:DisplayName/text()", ns);
  NodeId = select(String("//ns1:UAObjectType/@NodeId") , ns);
  fs.writeFileSync("Names.xml" , NodeName )
  fs.writeFileSync("Ids.xml", NodeId)
  console.log(NodeId);
  if (mapper["ObjectType"] != null) {
    var otypes = {};
    for (i = 0 ; i<NodeName.length ; i++){
        add(otypes , NodeName[i] , NodeId[i]);
    }
  }

Это то, что я получаю в качестве вывода в файле Ids. xml:


 NodeId="ns=1;i=1001", NodeId="ns=1;i=15035", NodeId="ns=1;i=15048", NodeId="ns=1;i=15051"

Это то, что я хотел бы иметь в качестве вывода :

ns=1;i=1001, ns=1;i=15035 , ns=1;i=15048 , ns=1;i=15051

Знаете, как я могу это решить?

Спасибо всем за внимание.

1 Ответ

0 голосов
/ 04 мая 2020

Предполагается, что у вас есть доступ к процессору XPath 2.0 (Saxon- JS?, Xpath. js?):

string-join(//*[name()="UAObjectType"]/@NodeId,",")

Тест с: https://raw.githubusercontent.com/OPCFoundation/UA-Nodeset/master/Robotics/Opc.Ua.Robotics.NodeSet2.xml

Вывод: 'ns=1;i=1002,ns=1;i=1004,ns=1;i=16601,ns=1;i=16794,ns=1;i=1019,ns=1;i=1022,ns=1;i=1013,ns=1;i=17230,ns=1;i=17233,ns=1;i=1003,ns=1;i=17725,ns=1;i=17793,ns=1;i=1011,ns=1;i=1018,ns=1;i=18175'

Или с XPath 1.0, l oop для каждого UAObjectType и конкататация каждой строки @NodeId (string(./@NodeId)).

...