Я пытаюсь получить список значений атрибутов для дочерних элементов элемента, но хочу, чтобы значения отображались только один раз.Выберите disctinct в XSLT относительно каждого элемента
Например, у меня есть следующий XML
<root>
<sec>
<nom-title>
<nom-chapter>
<nom-article><data att="1.1"/></nom-article>
<nom-article>
<nom-item><data att="1.1"/></nom-item>
<nom-item><data att="1.2"/></nom-item>
</nom-article>
</nom-chapter>
<nom-chapter>
<nom-article><data att="2.1"/></nom-article>
<nom-article><data att="1.1"/></nom-article>
</nom-chapter>
</nom-title>
<nom-title>
<nom-chapter>
<nom-article><data att="1.1"/></nom-article>
</nom-chapter>
</nom-title>
</sec>
</root>
И я хочу, результат подобного:
<root>
<nom-title>
<att>1.1</att>
<att>1.2</att>
<att>2.1</att>
<nom-chapter>
<att>1.1</att>
<att>1.2</att>
<nom-article>
<att>1.1</att>
</nom-article>
<nom-article>
<att>1.1</att>
<att>1.2</att>
<nom-item><att>1.1</att></nom-item>
<nom-item><att>1.2</att></nom-item>
</nom-article>
</nom-chapter>
</nom-title>
<nom-title>
<att>1.1</att>
<nom-chapter>
<att>1.1</att>
<nom-article>
<att>1.1</att>
</nom-article>
</nom-chapter>
</nom-title>
</root>
Я пытался использовать XSL: ключевой элемент, но он возвращает только значение для одного элемента. В этом примере он возвращает только 1.1 для первого заголовка, но не второго. XSL я использовал:
<xsl:key name="allAtt"
match="//*[starts-with(name(.),'nom-')]/data"
use="@att"/>
<xsl:template match="nom-title|nom-chapter|nom-article|nom-item">
<xsl:element name="name(.)">
<xsl:apply-templates select=".//*[starts-with(name(.),'nom-')]/data
</xsl:element>
</xsl:template>
<xsl:template match="data">
<xsl:variable name="att" select="@att"/>
<xsl:if test="generate-id(.)=generate-id(key('allAtt',$att)[1]">
<xsl:element name="att"><xsl:value-of select="$att"></xsl:element>
</xsl:if>
</xsl:template>
В моем опыте с xslt для начала нужно иметь действительный xml. Похоже, элемент «nom-article» не закрыт. Возможно, сначала захочется исправить это. –
Я согласен с Джастином, пожалуйста, сначала покажите нам правильно сформированный образец ввода XML, в настоящее время структура ввода нечеткая, при этом несколько тегов не закрываются должным образом (например, '', ' '). –
Извините, неправильная копия, я исправил ее. – claudex