У меня есть xml-файл, который генерируется процессом. У этого xml может быть много продуктов и предметов под каждым продуктом. Однако есть сценарии, когда у продукта нет товаров под ним, как показано в примере ниже. В этой ситуации я хочу, чтобы xml не генерировал продукты, в которых нет элемента. Мне нужен скрипт xsl, который должен это сделать. Кто-нибудь может помочь? Входной файл XML являетсяБлокировать элементы XML, если нижний элемент отсутствует или пустой
<?xml version="1.0" encoding="UTF-8"?>
<products>
<product>
<prod id>P16754</prod id>
<product-status>CREATED</product-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
<items/>
<created-on>2016-08-12T11:30:00</created-on>
<created-by>Administrator</created-by>
<last-changed-on>2016-08-04T17:34:00</last-changed-on>
<last-changed-by>ap0712</last-changed-by>
<delete>false</delete>
</product>
<product>
<prod id>P16754</prod id>
<product-status>CREATED</product-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
<items>
<item>
<item id>i16754</item id>
<item-status>CREATED</item-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
</item>
<items/>
<created-on>2016-08-12T11:30:00</created-on>
<created-by>Administrator</created-by>
<last-changed-on>2016-08-04T17:34:00</last-changed-on>
<last-changed-by>ap0712</last-changed-by>
<delete>false</delete>
</product>
</products>
Так как первый продукт не имеет элемент, так чтобы этот продукт, а также элемент должен быть удален из выходного XML. Вывод должен быть
<products>
<product>
<prod id>P16754</prod id>
<product-status>CREATED</product-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
<items>
<item>
<item id>i16754</item id>
<item-status>CREATED</item-status>
<validation-status>Valid</validation-status>
<duplication-status>Unique</duplication-status>
<content-status>New</content-status>
</item>
<items/>
<created-on>2016-08-12T11:30:00</created-on>
<created-by>Administrator</created-by>
<last-changed-on>2016-08-04T17:34:00</last-changed-on>
<last-changed-by>ap0712</last-changed-by>
<delete>false</delete>
</product>
</products>
код, я использую, чтобы достичь на основании предложений здесь
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Prod ID[not(items/item)]"/>
</xsl:stylesheet>
Я вижу, что она удаляет продукт и товар, если он пустой, но я получаю следующее выход, например, код XSLT приходит на выходе
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Prod ID[not(items/item)]"/>
</xsl:stylesheet>
Недействительны ваши XML-документы. Пожалуйста, исправьте их и отправьте код XSLT, который вы пробовали. –