2015-04-27 3 views
1

У меня есть XML-структура, как это:Расчет скидки с использованием XPath

<?xml version="1.0"?> 
<catalog> 

    <book id="bk101"> 
     <title>XML Developer's Guide</title> 
     <price>44.95</price> 
     <sale-price>4.90</sale-price> 
    </book> 

    <book id="bk102"> 
     <title>Midnight Rain</title> 
     <price>5.95</price> 
     <sale-price>4.90</sale-price> 
    </book> 

</catalog> 

Я хочу, чтобы выбрать узлы, где продажная цена со скидкой более 30% от обычной цены. Как я могу это сделать с помощью XPath?

+0

Я думаю, XQuery может быть больше подходит, но я не знаком с этим уровнем в любой – Filype

ответ

1

Вы можете попробовать этот способ:

//book[(price - sale-price) div price > 0.3] 

Выше XPath возвращают все <book> узлы, имеющие продажа-цена со скидкой более 30% от обычной цены.

Выход:

<book id="bk101"> 
    <title>XML Developer's Guide</title> 
    <price>44.95</price> 
    <sale-price>4.90</sale-price> 
</book> 
1

Другой способ взглянуть на то, что вы хотите книги, где sale-price составляет менее 70% от price.

В Xpath:

sale-price div price < 0.7

Сделать это условие для книги узлов элементов

/catalog/book[sale-price div price < 0.7]

PHP Пример:

$xml = <<<'XML' 
<?xml version="1.0"?> 
<catalog> 

    <book id="bk101"> 
     <title>XML Developer's Guide</title> 
     <price>44.95</price> 
     <sale-price>4.90</sale-price> 
    </book> 

    <book id="bk102"> 
     <title>Midnight Rain</title> 
     <price>5.95</price> 
     <sale-price>4.90</sale-price> 
    </book> 

</catalog> 
XML; 

$dom = new DOMDocument(); 
$dom->loadXml($xml); 
$xpath = new DOMXPath($dom); 

$expression = '/catalog/book[ 
    sale-price div price < 0.7 
]'; 

foreach ($xpath->evaluate($expression) as $node) { 
    echo $dom->saveXml($node); 
} 

Выход:

<book id="bk101"> 
    <title>XML Developer's Guide</title> 
    <price>44.95</price> 
    <sale-price>4.90</sale-price> 
</book> 
Смежные вопросы