saxonjs игнорирует правила сопоставления для ввода json

#json #xml #xslt #xslt-3.0 #saxon-js

#json #xml #xslt #xslt-3.0 #саксонский-js

Вопрос:

Я пытаюсь преобразовать входные данные json в xml с помощью saxonjs, это упрощенная версия моего кода

 const fs = require('fs'); const saxonJS = require('saxon-js'); const input = JSON.stringify({issue: {id: 'A001', number: 200 }});   saxonJS.transform({  stylesheetLocation: './issues.sef.json',  sourceType: 'json',  sourceText: JSON.stringify(input),  destination: 'serialized'}, 'async').then(data =gt; {  console.log(data.principalResult);  res.status(200).send('Ok');  });      })  .catch(err =gt; {  console.log(err);  res.status(500).send('error');  });  

Моя таблица стилей xslt выглядит так:

 lt;?xml version="1.0" encoding="utf-8"?gt; lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"gt;  lt;xsl:output method="xml" encoding="utf-8" indent="yes"/gt;  lt;xsl:template match="/"gt;  lt;Issue xmlns="urn:mycompany:2021"gt;  lt;/Issuegt;  lt;/xsl:templategt; lt;/xsl:stylesheetgt;   

Результат всегда пуст или, точнее lt;?xml version="1.0" encoding="utf-8"?gt; , если я заменю match=»/» на match=»проблема» или «/проблема», результат будет тот же, что и раньше, что я делаю не так?

Ответ №1:

/ соответствует узлу документа или узлу фрагмента документа, ваш элемент не является узлом, а картой XPath 3.1, используется match="." для сопоставления любого элемента, match=".[. instance of map(*)]" для сопоставления любого элемента карты.