Я пытаюсь исключить узлы записи, если все, кроме одного элемента(), пустые. Для простоты, я уменьшил число элементов под записью элемента до четырех, но это возможно для меня, чтобы иметь до 50. (Так обратной логики проверки, если каждый field = ''
был бы ужасно.)Исключить XML-узел, если все, кроме 1 (или 2) детей, пустые XSLT
Input
<root>
<record>
<date>1/1/2015</date>
<text>not empty</text>
<text1/>
<text2>not empty</text2>
</record>
<record>
<date>1/3/2015</date>
<text/>
<text1/>
<text2/>
</record>
<record>
<date>1/5/2015</date>
<text/>
<text1/>
<text2>more not empty</text2>
</record>
ближайший я пришел следующая
<!--Identity template to copy all content by default-->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="record/*[not(node())]"/>
<xsl:template match="date[not(following-sibling::* != '')]"/>
Выход
<root>
<record>
<date>1/1/2015</date>
<text>not empty</text>
<text2>not empty</text2>
</record>
<record/>
<record>
<date>1/5/2015</date>
<text2>more not empty</text2>
</record>
</root>
Я хотел (а) исключить пустые <record/>
. Это также не работает, если у меня есть второй «известный» элемент. Например, если на первой записи был элемент <date2>1/1/99</date2>
ниже элемента даты. У кого-нибудь есть идеи?
Простой и элегантный! Спасибо! – hopkinch