XSLT 1.0 - неожиданный токен '{' в выражении. -> {<- имя (.)} - PullRequest
1 голос
/ 22 января 2020

Учитывая входной файл, показанный ниже, первый пример кода работает, а второй пример кода завершается с ошибкой:

Неожиданный токен '{' в выражении. -> {<- 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?

1 Ответ

1 голос
/ 22 января 2020

Методом проб и ошибок я заставил это работать:

<xsl:value-of select="name(.)" />

Просто удалил фигурные скобки, которые говорят ему запускать то, что внутри, в скобках как xpath. Я все еще немного неясен, почему это необходимо в названии = хотя.

...