динамический набор узлов сборки на основе ввода xml с xslt1.0 - PullRequest
0 голосов
/ 25 мая 2020

При использовании функции xslt document (). Чтение, например, следующего xml:

<Products>
    <Product productCode="SQUARE-BLUE-EXTRA-A-10-MAY" messageType="FOUNTAIN" messageTag="F"/>
    <Product productCode="SQUARE-RED-EXTRA-B-20-JUNE" messageType="FOUNTAIN" messageTag="F"/>
</Products>

Результатом является набор узлов, который может быть сохранен в переменной. Вместо чтения документа xml я хочу создать эту переменную с набором узлов динамически на основе ввода xml.

пример ввода xml:

<Root>
    <Object>
        <QuoteLineItems>
            <Object>
                <Product2Id>
                    <ProductCode>SQUARE</ProductCode>
                </Product2Id>
                <QuoteLineItems>
                    <Object>
                        <Product2Id>
                            <ProductCode>BLUE</ProductCode>
                        </Product2Id>
                        <QuoteLineItems>
                            <Object>
                                <ServiceDate>MAY</ServiceDate>
                                <attributes>
                                    <Object>
                                        <attributeuniquecode>ATTR_VOLUMEPERCENTAGE</attributeuniquecode>
                                        <attributedisplayname>Volume percentage</attributedisplayname>
                                        <value>10</value>
                                    </Object>
                                    <Object>
                                        <attributeuniquecode>ATTR_TYPE</attributeuniquecode>
                                        <attributedisplayname>Type</attributedisplayname>
                                        <value>A</value>
                                    </Object>
                                </attributes>
                                <Product2Id>
                                    <ProductCode>EXTRA</ProductCode>
                                </Product2Id>
                                <QuoteLineItems/>
                            </Object>
                        </QuoteLineItems>
                    </Object>
                    <Object>
                        <Product2Id>
                            <ProductCode>RED</ProductCode>
                        </Product2Id>
                        <QuoteLineItems>
                            <Object>
                                <ServiceDate>JUNE</ServiceDate>
                                <attributes>
                                    <Object>
                                        <attributeuniquecode>ATTR_VOLUMEPERCENTAGE</attributeuniquecode>
                                        <attributedisplayname>Volume percentage</attributedisplayname>
                                        <value>20</value>
                                    </Object>
                                    <Object>
                                        <attributeuniquecode>ATTR_TYPE</attributeuniquecode>
                                        <attributedisplayname>Type</attributedisplayname>
                                        <value>B</value>
                                    </Object>
                                </attributes>
                                <Product2Id>
                                    <ProductCode>EXTRA</ProductCode>
                                </Product2Id>
                                <QuoteLineItems/>
                            </Object>
                        </QuoteLineItems>
                    </Object>
                </QuoteLineItems>
            </Object>
        </QuoteLineItems>
    </Object>
</Root>

i хочу сделать это, потому что мне нужно проверить определенный ввод xml по списку поиска (сначала xml). при дальнейшем расширении список поиска с возможными комбинациями будет бесконечным. поэтому я хочу создать точно такой же список поиска на основе ввода xml и поместить его в переменную с тем же форматом, что и функцию document ().

Я пробовал что-то и выключен в течение последних часов, но я не могу найти что-то приличное. возможно ли это?

Это мое текущее использование функции документа:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:variable name="products" select="document(file.xml)/Products/Product[@messageType=$messageType]/@productCode"/>
    <Messages>
        <xsl:for-each select="$products">
            <xsl:apply-templates mode="initial" select="$root">
                <xsl:with-param name="productCode" select="."/>
            </xsl:apply-templates>
        </xsl:for-each>
    </Messages>
</xsl:stylesheet>

как вы можете видеть, у меня есть переменная $ products. который содержит весь мой список поиска. Затем я могу применить шаблон для каждого продукта. второй документ - это просто мой ввод xml. и я хочу создать список поиска в переменной на основе этого ввода xml.

...