Как видно, мои знания XML и XSLT довольно ограничены. Пожалуйста, кто-нибудь может помочь мне с файлом перевода, который позволит передать каждый ItemNumber/Заказ на продажу в следующем XML, чтобы второй XML был создан для каждого элемента. Другими словами, мне нужно создать несколько выходных xmls (по одному для каждого заказа клиента). На данный момент я получаю только один выходной файл xml для последней позиции/заказа клиента на начальном xml.Зацикливание файла перевода для каждой строки xml
Вот XML, что мне нужно перевести:
<?xml version="1.0" encoding="Windows-1252"?>
<postsalesorderssct Language='05' Language2='EN' CssStyle='' DecFormat='1' DateFormat='01' Role='01' Version='6.1.009' OperatorPrimaryRole=' '>
<Item>
<Key>
<SalesOrder>197588</SalesOrder>
<SourceWarehouse>A3</SourceWarehouse>
<TargetWarehouse>PV</TargetWarehouse>
<CustomerPoNumber/>
</Key>
<ItemNumber>000001</ItemNumber>
</Item>
<Item>
<Key>
<SalesOrder>197589</SalesOrder>
<SourceWarehouse>A3</SourceWarehouse>
<TargetWarehouse>HI</TargetWarehouse>
<CustomerPoNumber/>
</Key>
<ItemNumber>000002</ItemNumber>
</Item>
<Item>
<Key>
<SalesOrder>197590</SalesOrder>
<SourceWarehouse>A3</SourceWarehouse>
<TargetWarehouse>WS</TargetWarehouse>
<CustomerPoNumber/>
</Key>
<ItemNumber>000003</ItemNumber>
</Item>
<Item>
<Key>
<SalesOrder>197591</SalesOrder>
<SourceWarehouse>A4</SourceWarehouse>
<TargetWarehouse>HI</TargetWarehouse>
<CustomerPoNumber/>
</Key>
<ItemNumber>000004</ItemNumber>
</Item>
<Item>
<Key>
<SalesOrder>197592</SalesOrder>
<SourceWarehouse>A4</SourceWarehouse>
<TargetWarehouse>PV</TargetWarehouse>
<CustomerPoNumber/>
</Key>
<ItemNumber>000005</ItemNumber>
</Item>
<Item>
<Key>
<SalesOrder>197593</SalesOrder>
<SourceWarehouse>A4</SourceWarehouse>
<TargetWarehouse>WS</TargetWarehouse>
<CustomerPoNumber/>
</Key>
<ItemNumber>000006</ItemNumber>
</Item>
<StatusOfItems>
<ItemsProcessed>000006</ItemsProcessed>
<ItemsInvalid>000000</ItemsInvalid>
</StatusOfItems>
</postsalesorderssct>
Вот файл перевода я в настоящее время с помощью:
<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="Windows-1252" omit-xml-declaration="yes" />
<xsl:template match="/">
<Query>
<Key>
<xsl:for-each select = "postsalesorderssct/Item/Key">
<SalesOrder><xsl:value-of select="SalesOrder"/></SalesOrder>
</xsl:for-each>
</Key>
</Query>
</xsl:template>
</xsl:stylesheet>
Здесь требуемая мощность для каждого из ItemNumbers на начальный xml. Другими словами, мне нужен один из них для каждого номера заказа клиента:
<Query xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="SORQRY.XSD">
<Key>
<SalesOrder>197588</SalesOrder>
<Invoice/>
</Key>
<Option>
<IncludeStockedLines>Y</IncludeStockedLines>
<IncludeNonStockedLines>Y</IncludeNonStockedLines>
<IncludeFreightLines>Y</IncludeFreightLines>
<IncludeMiscLines>Y</IncludeMiscLines>
<IncludeCommentLines>Y</IncludeCommentLines>
<IncludeCompletedLines>Y</IncludeCompletedLines>
<IncludeSerials>N</IncludeSerials>
<IncludeLots>Y</IncludeLots>
<IncludeBins>Y</IncludeBins>
<IncludeAttachedItems>N</IncludeAttachedItems>
<IncludeCustomForms>Y</IncludeCustomForms>
<IncludeDetailLineCustomForms>Y</IncludeDetailLineCustomForms>
<XslStylesheet/>
</Option>
</Query>
Благодарим вас в ожидании.
Ваш XSLT не соответствует вашему входному XML. Например, в вашем XSLT вы используете 'postsororderstatus/Item/Order', но во входном XML корневой каталог' ', поэтому не существует. Также вы просматриваете каждый '', но этот элемент также не входит в ваш входной XML. Когда я смотрю на желаемый результат, это тоже не соответствует. Так что вы хотите? Или, пожалуйста, исправьте свой вопрос! –
Какую версию XSLT вы используете? В XSLT 1.0 теперь можно сделать это без использования элементов расширения (если у вас есть доступ к exslt, вы можете использовать). В XSLT 2.0 вы можете использовать для создания нескольких выходных файлов. –
Мои извинения. У меня было открытое несколько файлов и скопировано неправильное. Я отрегулирую вопрос соответствующим образом. –