Синтаксический анализ XML с помощью XSLT вызывает проблему на узле ROOT.
У меня есть XML-файл, который я должен проанализировать с помощью xslt, но проблема в том, что в корневом узле у меня есть ссылка, которая не позволяет мне анализировать XML-файл. Если я удалю эту ссылку из XML-файла, я смогу разобрать файл. XML-файл выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<ROOT xmlns="http://link.org/3.2.1">
<TOP-LEVEL-PACKAGES>
<AR-PACKAGE>
<SHORT-NAME>ActiveEcu</SHORT-NAME>
</AR-PACKAGE>
</TOP-LEVEL-PACKAGES>
</ROOT>
Но я не должен изменять XML-файл, поэтому мне нужно решение для его анализа без удаления этой ссылки. Любое решение?
1 ответ
В узле таблицы стилей добавьте что-то вроде этого xmlns:ns1="link.org/3.2.1"; затем при обращении к корневому узлу используйте следующий синтаксис: ns1:ROOT
По сути, ваш узел ROOT связан с пространством имен по умолчанию, представленным URL. В шаблоне xslt вы должны указать адрес namspace to URL, чтобы сообщить парсеру XSLT, что узел ROOT принадлежит этому конкретному пространству имен.
Фактически, все дочерние узлы вашего данного xml принадлежат пространству имен по умолчанию, представленному URL
Например
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="xsl"
xmlns:ns1="http://link.org/3.2.1">
<xsl:template match="/">
<xsl:value-of select="ns1:ROOT"/>
</xsl:template>
</xsl:stylesheet>