XSLT работает с анализируемой моделью данных XML (дерево XML). Модель данных XML не делает различий между самозакрывающимися элементами и пустыми элементами с отдельными начальными и конечными тегами. Оба они - просто элементы, у которых совсем нет дочерних узлов (текст, элемент, комментарий и т. Д.). Таким образом, на этапе, когда процессор XSLT переходит к данной XML-структуре, все это лексическое изменение уже потеряно.
Единственное решение, которое мне приходит в голову, - это использовать синтаксический анализатор, который имеет некоторые расширения для добавления лексических данных в анализируемое дерево. Это может быть основано на модификации дерева путем добавления новых элементов, которые представляют различные лексические события. Тогда ваш XSLT-код может идентифицировать эти узлы, добавленные синтаксическим анализатором, и обработать их соответствующим образом.
Но, в конце концов, если вы не спрашиваете об этом только потому, что это вас интересует, но вам действительно нужно различать <node/>
и <node></node>
в вашем документе XSLT, то, вероятно, что-то не так в вашей цепочке инструментов / процессе модель.