Преобразование XML с использованием XSLT 3.0 Как выбрать элемент для вывода на основе значения элемента-брата - PullRequest
1 голос
/ 04 мая 2020

У меня есть XML вход, как показано ниже. Я хочу напечатать выходные данные каждого клиента для полей Cust_1, Gender & Price. Я только хочу напечатать цену на стулья с красным цветом. Я пытался использовать выбор, когда и если, но не получая желаемый результат. Любая помощь с благодарностью.

<Sales_Data>
    <Furniture>
        <Customer_Reference>Cust_1</Customer_Reference>
        <Gender>M</Gender>
        <Chairs>
            <Color_Ref>Black</Color_Ref>
            <Price>
                <Unit_Price>1000</Unit_Price>
            </Price>
        </Chairs>
        <Chairs>
            <Color_Ref>Red</Color_Ref>
            <Price>
                <Unit_Price>1100</Unit_Price>
            </Price>
        </Chairs>
    </Furniture>
    <Furniture>
        <Customer_Reference>Cust_2</Customer_Reference>
        <Gender>F</Gender>
        <Chairs>
            <Color_Ref>Blue</Color_Ref>
            <Price>
                <Unit_Price>950</Unit_Price>
            </Price>
        </Chairs>
        <Chairs>
            <Color_Ref>Red</Color_Ref>
            <Price>
                <Unit_Price>1050</Unit_Price>
            </Price>
        </Chairs>
    </Furniture>
</Sales_Data>

1 Ответ

1 голос
/ 04 мая 2020

Чтобы вывести желаемое значение, используйте следующее выражение XPath-1.0

/Sales_Data/Furniture[Customer_Reference='Cust_1' and Gender='M']/Chairs[Color_Ref='Red']/Price/Unit_Price

или полную таблицу стилей XSLT

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />

    <xsl:template match="/">
      <xsl:value-of select="/Sales_Data/Furniture[Customer_Reference='Cust_1' and Gender='M']/Chairs[Color_Ref='Red']/Price/Unit_Price"/>
    </xsl:template>

</xsl:stylesheet>

В обоих случаях выходным значением является желаемое значение 1100.

...