Учитывая входной файл, показанный ниже, первый пример кода работает, а второй пример кода завершается с ошибкой:
Неожиданный токен '{' в выражении. -> {<- name (.)} </p>
Основное различие заключается в том, помещаю ли я {name(.)}
в атрибут name или атрибут select. Мне нужно сгенерировать данные, подобные второму коду, чтобы соответствовать моей схеме OAGIS ProcessShipment.
<xsl:for-each select="//s0:B2">
<xsl:for-each select="./*">
<xsl:if test=".">
<xsl:element name="{name(.)}" >
<xsl:value-of select="." />
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
Код, который не работает:
<xsl:for-each select="//s0:B2">
<xsl:for-each select="./*">
<xsl:if test=".">
<xsl:element name="ID" xmlns="http://www.openapplications.org/oagis/10">
<xsl:attribute name="typeCode">
<xsl:value-of select="{name(.)}" />
</xsl:attribute>
<xsl:value-of select="." />
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
Желаемый выход:
<ID typeCode="B202>ABCD</ID>
<ID typeCode="B204>0080082626</ID>
<ID typeCode="B206>PP</ID>
Входные данные:
<ns0:X12_00401_204 xmlns:ns0="http://example.com/X12/204">
<ST>
<ST01>204</ST01>
<ST02>0001</ST02>
</ST>
<ns0:B2>
<B202>ABCD</B202>
<B204>0080082626</B204>
<B206>PP</B206>
</ns0:B2>
</ns0:X12>
Ссылка: Как выбрать каждый дочерний узел родителя в операторе for-each xslt?