Я новичок в использовании XSLT и столкнулся с проблемой с одной из моих программ. Я пытался решить эту проблему с моими ограниченными знаниями, но безрезультатно. Я пытаюсь обработать файл XML, чтобы получить только американские части. Данные содержат как китайскую, так и американскую части. Данные содержатся в повторяющихся узлах.
Я пробовал использовать условные операторы, чтобы ограничить выбор только получением идентификатора детали из США. Однако я получаю идентификаторы для всех частей.
Это образец входного файла XML:
<Part>
<Part_ID>Comp-97531</Part_ID>
<Country>US</Country>
<Identification_Data>
<Product>Finished</Product>
<ID>12345678909876</ID>
<ID_Type>CHN-1</ID_Type>
<Identification_Data>
<Identification_Data>
<Product>Finished</Product>
<ID>123456789</ID>
<ID_Type>CHN-2</ID_Type>
</Identification_Data>
<Identification_Data>
<Product>Finished</Product>
<ID>13579</ID>
<ID_Type>CHN-3</ID_Type>
</Identification_Data>
<Identification_Data>
<Product>Finished</Product>
<ID>555555555</ID>
<ID_Type>USA-1</ID_Type>
</Identification_Data>
</Part>
<Part>
<Part_ID>Comp-95137</Part_ID>
<Country>US</Country>
<Identification_Data>
<Product>Finished</Product>
<ID>1234567812345</ID>
<ID_Type>CHN-1</ID_Type>
<Identification_Data>
<Identification_Data>
<Product>Finished</Product>
<ID>987654321</ID>
<ID_Type>CHN-2</ID_Type>
</Identification_Data>
<Identification_Data>
<Product>Finished</Product>
<ID>246810</ID>
<ID_Type>CHN-3</ID_Type>
</Identification_Data>
<Identification_Data>
<Product>Finished</Product>
<ID>777777777</ID>
<ID_Type>USA-1</ID_Type>
</Identification_Data>
</Part>
Это код XSLT, который я пытаюсь:
<xsl:template match="/">
<FILE>
<xsl:for-each select="Part">
<xsl:call-template name="ProductRecord"/>
</xsl:for-each>
</FILE>
</xsl:template>
<xsl:template name="ProductRecord">
<ID>
<xsl:choose>
<xsl:when test="Country = 'US'">
<xsl:if test="Identification_Data/ID_Type='USA-1'">
<xsl:value-of select="Identification_Data/ID"/>
</xsl:if>
</xsl:when>
</xsl:choose>
</ID>
</xsl:template>
Требуется получить только детали, изготовленные в США с ID_TYPE = USA-1.
Используя код XSLT, я ожидаю только значения для ID_Type = USA-1, которые будут 555555555. Однако вывод, который я получаю, выглядит следующим образом:
12345678909876 123456789 13579 555555555.
Как я могу ограничить выбор, чтобы показывать только данные, специфичные для США?
Заранее спасибо за ваш ответ.