Как можно конвертировать XML файл в другой формат XML?

Как я могу написать скрипт на JavaScript для фильтрации ненужных тегов из входного XML-файла, чтобы создать новый XML-файл только с нужными тегами для загрузки в программу, принимающую файлы только по заданному шаблону? Может кто-то поделиться подходящим примером кода или подсказать, как это сделать правильно?
  • 22 мая 2024 г. 7:11
Ответы на вопрос 1
Для конвертации XML файла в другой формат XML можно использовать различные инструменты и библиотеки. Один из способов - использовать язык XSLT (Extensible Stylesheet Language Transformations). XSLT можно использовать для преобразования XML документов в другой XML формат. В XSLT файле указываются правила преобразования, которые определяют какие теги и значения должны быть сконвертированы.

Вот пример XSLT файла для преобразования XML файла:

```xml
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <newXML>
      <xsl:apply-templates/>
    </newXML>
  </xsl:template>
  
  <xsl:template match="tag1">
    <newTag1>
      <xsl:apply-templates/>
    </newTag1>
  </xsl:template>
  
  <xsl:template match="tag2">
    <newTag2>
      <xsl:apply-templates/>
    </newTag2>
  </xsl:template>
</xsl:stylesheet>
```

Этот XSLT файл будет преобразовывать XML документ, заменяя теги `<tag1>` и `<tag2>` на `<newTag1>` и `<newTag2>` соответственно.

Чтобы использовать этот XSLT файл для преобразования XML файла, можно воспользоваться инструментами, поддерживающими XSLT, например, программой Saxon.

Для написания скрипта на JavaScript для фильтрации ненужных тегов из XML файла можно использовать библиотеку DOMParser для парсинга XML и DOM API для манипуляции с ним. Вот пример кода:

```javascript
const xmlString = `<?xml version="1.0" encoding="UTF-8"?>
<root>
  <tag1>data1</tag1>
  <tag2>data2</tag2>
  <tag3>data3</tag3>
</root>`;

const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlString, 'text/xml');

const tagsToRemove = ['tag1', 'tag3'];

tagsToRemove.forEach(tagName => {
  const elementsToRemove = xmlDoc.getElementsByTagName(tagName);
  Array.from(elementsToRemove).forEach(element => {
    element.parentNode.removeChild(element);
  });
});

const newXmlString = new XMLSerializer().serializeToString(xmlDoc);
console.log(newXmlString);
```

Этот код удаляет теги `<tag1>` и `<tag3>` из входного XML файла и выводит измененный XML.
Похожие вопросы