Как я могу различить их?
Вы не можете различить их в инструменте XML, поскольку они представляют собой два разных способа сериализации точно такого же дерева узлов XML. Если вашему заявлению требуется, чтобы провести различие между двумя случаями , тогда вам нужно использовать какой-то инструмент не-XML, либо исключительно, либо как шаг предварительной обработки.
Например, если вы знаете, что в исходном файле нет экземпляров строки «/>
», кроме как в теге пустой тега, вы можете сделать текстовую замену в исходном файле (обработанный как текст), чтобы изменить все экземпляры
/>
в
_wasEmpty="yes"/>
(в том числе ведущего пространства) перед разбором результат как XML, а затем ваш XSLT можно выделить с помощью <xsl:when test="example[_wasEmpty = 'yes']">
.
я (и многие другие на SO) утверждают, что приложение, которое претендует на XML основе, но которые необходимо различать то, что XML говорит эквивалентны принципиально сломана - правильный подход здесь поговорить с тем, кто проектировал формат, который вы потребляете, и попросить их изменить его, чтобы отличать случаи по XML-совместимому способу, например, с использованием xsi:nil
. Но я прагматичен и ценю, что иногда это невозможно ;-)
Примечание: Тест = «пример» - это тест, если узел существует, он существует в обоих случаях и поэтому является истинным для обоих. Это относится также ко второму случаю, так как оба дочерних узла содержат пустую строку. –