Мне нужно написать обширный XSLT, который не выводит (удаляет) любой элемент, который пуст. Для атрибутов это означает, что если значение пути пуст, оно не будет заполнять этот атрибут на выходе. Для узлов это означает, что если данных нет (пустые атрибуты или дочерние узлы без атрибутов/данных), он не будет заполнять этот узел на выходе. Ниже приведен пример, связанный с Бейсболом, чтобы лучше объяснить, что я ищу.XSL Удаление пустых элементов после трансформации
Как выход выглядит сейчас:
<Baseball>
<Fields>
<Equipment>
<Bats>
<Bat Brand="Louisville" Model="16534" Length="34" Weight="30" Description="Composite" />
<Bat Brand="Easton" Model="asdfer" Length="32" Weight="29" Description="" />
<Bat Brand="" Model="" Length="" Weight="" Description="" />
</Bats>
<Gloves>
<Glove Brand="" Model="" Length="" Description="" />
</Gloves>
</Equipment>
</Fields>
</Baseball>
Как мне нужен выход выглядеть следующим образом:
<Baseball>
<Fields>
<Equipment>
<Bats>
<Bat Brand="Louisville" Model="16534" Length="34" Weight="30" Description="Composite" />
<Bat Brand="Easton" Model="asdfer" Length="32" Weight="29" />
</Bats>
</Equipment>
</Fields>
</Baseball>
Я знаю, что я могу решить эту проблему, написав для проверки значения, но с учетом длина преобразования, я хотел бы избежать этого, если это вообще возможно. Кроме того, укажите структуру XML, из которой я буду рисовать, атрибуты для данного выходного узла будут иметь пути, которые отличаются друг от друга. Например, атрибут «Бренд» в выходном узле «Bat» может иметь путь «ab/cd/ef/brand», тогда как атрибут «Модель» может иметь путь «ab/wx/yz/model». (Я знаю, что мой пример Бейсбола выше не способствует этому). Есть ли способ достичь этого, не написав два XSLT? Можете ли вы пройти через выход в XSLT?
Невозможно сделать второй проход с одним преобразованием, но вы можете написать свой XSLT, чтобы справиться с проблемой аккуратным способом ... у вас есть пример ввода XML, чтобы мы могли продемонстрировать? – JohnLBevan
@JohnLBevan "* Невозможно сделать второй проход с одним преобразованием *" Не уверен, что вы подразумеваете под этим. Вы, безусловно, ** можете ** сделать несколько проходов в пределах одного и того же преобразования (таблица стилей). Вы найдете множество примеров этого, вот только первый, который я выбрал: http://stackoverflow.com/questions/24205393/distinct-values-with-xslt-1-0-when-xpath-has-multiple-criteria/ 24216212 # 24216212 –
@ michael.hor257k - В показанном примере нет нескольких проходов документа. Данные загружаются в переменную, которая затем обрабатывается, но нет никакой настройки шаблона для элементов, сгенерированных другим шаблоном, который соответствует исходному документу. – JohnLBevan