Как я могу вызвать встроенный в Chrome парсер xml с помощью Angular 6? - PullRequest
0 голосов
/ 22 января 2019

У нас есть набор XML-документов в облаке, которые мы хотим обслуживать с помощью Angular. У нас есть XSL-файл с необходимым преобразованием для всех документов XML. (Все документы имеют одинаковый формат.) В идеале мы хотели бы максимизировать работу на стороне клиента (циклы ЦП в облаке стоят больше денег, чем циклы ЦП на клиенте). Каждый документ имеет встроенную ссылку на файл XSL, например:

<?xml-stylesheet type="text/xsl" href="CCD.xsl"?>

Если я просто открою XML-документ с помощью Chrome из терминала Mac, например:

sudo /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files [file].xml

... Chrome достаточно умен, чтобы видеть ссылку на XSL и использовать собственный процессор XSLT для создания HTML, который в конечном итоге используется для отображения документа. Могу ли я добиться такого же поведения, используя Angular, или я должен использовать компоненты Angular для отображения данных?

Похоже, что Angular сильно склоняется к использованию Typescript для создания компонентов, и я вижу множество решений, которые анализируют XML в JSON, а затем создают компоненты Angular на основе JSON. Но если Chrome уже знает, как преобразовывать XML-документы, и у меня есть XSL-файл со всем необходимым, то преобразование в JSON кажется большой дополнительной обработкой. Я чувствую, что может быть способ позволить Chrome самому обрабатывать XSLT.

1 Ответ

0 голосов
/ 19 февраля 2019

Я хотел задокументировать ответ, на котором в конце концов остановился, но сначала немного пояснений.

Я предполагал, что мы используем Angular Universal, которая использует Angular как на уровне сервера, так и на уровне клиента.Но это было неправильно: мы использовали обычный Angular, который предназначен для того, чтобы выплевывать файлы .html и .js, которые будут использоваться браузерами по всей стране, где почти все выполняется на стороне клиента, за исключением частей запросов API.Поэтому моя ссылка на «максимизировать работу на стороне клиента» неправильно поняла сценарий использования: ВСЕ работы уже выполнялись на стороне клиента.

Я так и не нашел способ заставить Chrome открыть файл XML и применитьXSLT-преобразование, просто сложным образом передавая его в Chrome, но учитывая, что браузер делал всю работу независимо от того, как я к нему подошел, я согласился с предложением Мартина Хоннена использовать xsltProcessor.

Эта ссылка показывает основной способ использования xlstProcessor, и я совсем не отступил от этого.

// initialize stuff
    const xsltProcessor = new XSLTProcessor();
    const parser = new DOMParser();
    const xmlRequest = new XMLHttpRequest();

    // Get XSL stylesheet
    xmlRequest.open('GET', 'assets/CCD.xsl', false);
    xmlRequest.send(null);
    const xsltDocument = xmlRequest.responseXML;

    // Parse core string retrieved from the server to formal XML document
    const xmlDocument = parser.parseFromString(this.source, 'text/xml');

    // Load stylesheet, transform to html
    xsltProcessor.importStylesheet(xsltDocument);
    const html = xsltProcessor.transformToDocument(xmlDocument);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...