Ограничить создание элемента в XSLT, если значение пусто - PullRequest
0 голосов
/ 21 января 2020

Я хотел создать новый элемент в target XML тогда и только тогда, когда значение элемента source XML не пусто. Я могу сделать это, используя приведенный ниже код. Но моя проблема в том, что у меня есть около 5 тыс. Полей для схожего состояния. Есть ли у нас лучший способ справиться с этим?

<xsl:if test="edi:po-num"> //wanted to avoid this for each element
    <xsl:element name="element">
        <xsl:attribute name="name">order_reference_number</xsl:attribute>
        <xsl:value-of select="edi:po-num"/>
    </xsl:element>
</xsl:if>

java код для преобразования:

Transformer trans = StylesheetCache.newTransformer(xslFilePath);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
trans.transform(source, new StreamResult(outputStream));

1 Ответ

0 голосов
/ 23 января 2020

Ваши возможности в XSLT 1.0 ограничены - код XSLT 1.0 имеет тенденцию быть многословным. Но если он действительно повторяющийся, то вы можете подумать о написании мета-таблицы стилей - таблицы стилей XSLT, которая генерирует вашу таблицу стилей из некоего высокоуровневого описания того, что ей нужно делать.

Обратите внимание, что ваш код будет намного менее многословно, если вы используете буквальные элементы результата и шаблоны значений атрибутов, а не xsl:element и xsl:attribute.

...