• Не могу понять почему?

    @Roman-Fov
    Игорь Статкевич, потому что никакое по не свободно от ошибок.
    5dd3b7ef6a7c1913514983.png

    Сам запрос верен. Но это не значит, что ошибка не может быть в процессоре обрабатывающем его
  • Как пользоваться оператором AND для XPATH?

    @Roman-Fov
    Если выбрать 3 и 4 элемент, то
    //table[@id="primenimost_table"]/tbody//tr/td[position() = 3 or position() = 4]
  • Как получают и сразу объединяют следующие (за текущим) элементы?

    @Roman-Fov
    Может тогда переложить работу со строками с XPaht на PHP?
  • Как вернуть строку без пробелов по краям?

    @Roman-Fov
    Shimpanze,
    <?php
    
    $dom = new DOMDocument();
    $dom->loadXML('<p>Hello <b>World</b> by.</p>');
    
    $xpath = new DOMXPath($dom);
    $result = $xpath->evaluate('normalize-space(/p/text()[1])');
    
    var_dump($result);

    Результат:
    string 'Hello' (length=5)
  • Как вернуть строку без пробелов по краям?

    @Roman-Fov
    Вы сперва обрезаете пробелы, а потом делите по частям.
    Нужно сперва делить по частям, а потом обрезать пробелы
  • Как добыть svg и тег из него?

    @Roman-Fov
    // не учитывать вложенность. Без него надо будет писать полный путь вроде
    /html/body/div/div/div/div/div/svg

    * означает любой элемент
  • Как добыть svg и тег из него?

    @Roman-Fov
    под свой код по аналогии сделать, тк неизвестно откуда делается этот запрос
  • Как найти значение?

    @Roman-Fov
    Ну... навряд browser.find_element_by_xpath будет работать с формами исходя из названия. Скорее это вроде ховера или просто поиска элемента для дальнейшей работы с ним. Поищите у него другие методы. Напр browser.form, browser.input или подобное
  • Как найти значение?

    @Roman-Fov
    Или проще, если не пойдёт
    //select/option[@value = 'yellow']
  • Xpath в css selector, как правильно будет в моем случае?

    @Roman-Fov
    Верно лишь отчасти.
    Сравнивать можно, но только с пустой строкой.
    В новых селекторах есть получение родителей. Правда их не реализовал ещё никто из браузеров
    https://www.w3.org/TR/selectors-4/#relational
  • Почему в Google Chrome и в Opera не открывается xml-файл с подключённым к нему xsl-стилями?

    @Roman-Fov
    Это если опера не старая. Со старой отдельно смотреть надо. Ну или обновить
  • Почему в Google Chrome и в Opera не открывается xml-файл с подключённым к нему xsl-стилями?

    @Roman-Fov
    Да. Все хромбазед будут работать. На них только кнопки переставляют и в разные цвета красят, а под капотом одно.
  • Как динамически добавлять блоки или изменять значения полей при использовании xslt?

    @Roman-Fov
    AnotherAnkor, по прежнему ничего не понятно.

    иметь возможность создавать параметром заданное значение (у меня это количество банковских операций)

    Вообще неясна задача. Те нужно нагенирить кучу елементов с рандомными данными на выходе? Если не с рандомными, то наверн из входного xml... Но тогда тумблеры и параметры всякие не надо. Зачем нужен параметр?

    иметь возможность влиять на содержимое (дебет с кредитом в этих операциях должны сойтись)

    Математика - не конёк xslt.
    Чтоб дебет с кредитом сошлись нужно данные нормально в базу заносить (или где они там хранятся). В xml должны попадать уже нормальные данные, где всё сходится. Иначе ценность этого xml сомнительна.

    Раз nda, то наверн можно рассмотреть похожие ситуации (с упрощённой структурой xml до минимума и данными забитыми для теста)
  • Как вывести itemprop="position" content="" в XSLT?

    @Roman-Fov
    Что выводит? Можно кусок получившегося html?
  • Как правильно написать условие XSLT?

    @Roman-Fov
    1. Задавая вопрос о xslt необходим не только сам файл с трансформациями, но и сам xml (который через них проходит). Это позволяет понять структуру документа и возможные ошибки в xpath.
    2. Тк шаблон напоминает шаблоны из юми, дальнейший код основывается на этом предположении.

    Есть кусок xml из демосайта umi:
    <result xmlns:xlink="http://www.w3.org/TR/xlink" module="catalog" method="object" domain="merrick4185.demo.umi-cms.ru" domain-id="1" system-build="86461" lang="ru" lang-id="1" header="SAUDA DOWN JKT" title="SAUDA DOWN JKT" csrf="3142cd4603afc75134699152ef769789" template-id="1" demo="1" pageId="97" is-default="" request-uri="/shop/muzhskaya_odezda/verhnyaya-odezhda/puhoviki/sauda-down-jkt.xml">
    	<meta>
    	<keywords/>
    	<description/>
    	</meta>
    	<user id="2" status="auth" login="demo" xlink:href="uobject://2" type="sv"/>
    	<page id="97" parentId="285" link="/shop/muzhskaya_odezda/verhnyaya-odezhda/puhoviki/sauda-down-jkt/" object-id="1058" type-id="154" alt-name="sauda-down-jkt" update-time="1542294206" xlink:href="upage://97" is-active="1">
    		<name>SAUDA DOWN JKT</name>
    		<basetype id="52" module="catalog" method="object">
    			<![CDATA[ Объекты каталога ]]>
    		</basetype>
    		<properties>
    			<group id="372" name="rate_voters">
    				<title>Количество проголосовавших</title>
    				<property id="15" object-id="1058" name="rate_voters" type="int" is-important="0">
    					<title>Количество проголосовавших</title>
    					<value>
    						<![CDATA[ 43 ]]>
    					</value>
    				</property>
    				<property id="16" object-id="1058" name="rate_sum" type="int" is-important="0">
    					<title>Сумма баллов</title>
    					<value>
    						<![CDATA[ df ]]>
    					</value>
    				</property>
    			</group>
    		</properties>
    	</page>
    </result>


    И шаблон под него:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template match="/">
        <xsl:apply-templates select="//property"/>
      </xsl:template>
    
      <xsl:template match="property"/>
    
      <xsl:template match="property[@name='rate_sum' and normalize-space(value) = '']"/>
    
      <xsl:template match="property[@name='rate_sum' and normalize-space(value) != '']">
        <div>
          <xsl:text>Бренд: </xsl:text>
          <xsl:apply-templates select="value"/>
        </div>
      </xsl:template>
    </xsl:stylesheet>


    Тут мы заставляем обработать все свойства:
    <xsl:apply-templates select="//property"/>

    Далее идут три template:
    <xsl:template match="property"/>
    <xsl:template match="property[@name='rate_sum' and normalize-space(value) = '']"/>
    <xsl:template match="property[@name='rate_sum' and normalize-space(value) != '']">


    Это очень похоже на то, как работают селекторы в css (я про каскад и без наследования). Очень удобно будет разбираться если вы уже сталкивались с css.

    • Первым делом мы отрубаем показ для всех свойств. Просто не будут мешаться.
    • Далее задаём поведение для свойства с пустым значением. Те отсутствие поведения.
    • И под конец задаём поведение при заполненном свойстве.


    Хоть property[@name='rate_sum'] и совпадает с template match="property", оно к нему применяться не будет тк есть более специфичное template match="property[@name='rate_sum' and normalize-space(value) != '']. Оно и будет применено.
    При пустом свойстве будет применятся template match="property[@name='rate_sum' and normalize-space(value) = ''] тк оно более специфичное и проходит по условию.

    3. Задавая шаблон для property[@name='artikul'] необязательно в нём указывать полный xpath к значению этого свойства. Достаточно будет писать с учётом, что мы уже находимся в этом элементе.
    <xsl:apply-templates select="$page//property[@name = 'artikul'][value]"/>

    Тут наверное имелось это ввиду
    <xsl:apply-templates select="$page//property[@name = 'artikul']/value"/>


    Такой код может быть потенциально опасен тем, что в xml документе может быть несколько элементов property c аттрибутом name равным artikul. Обработаются несколько сразу.

    4. Всё в квадратных скобках это условия.
    В xpath $page//property[@name = 'artikul'][value]
    Мы ищем property, где @name = 'articul' вернёт true и значение value вернёт true. При этом на дальнейшую обработку отправится не само значение из value, а property целиком. Ставим слеш и продвигаемся вглубь элемента:
    $page//property[@name = 'artikul']/value
    Мы ищем property, где @name = 'articul' вернёт true и отправляем его значение на дальнейшую обработку.

    5. Можно не заморачиваться и написать с использованием условий. Они достаточно многословны и создают дополнительные сложности в xslt, но порой без них не обойтись. Можно изменить пример выше вот так:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template match="/">
        <xsl:apply-templates select="//property"/>
      </xsl:template>
    
      <xsl:template match="property"/>
      <xsl:template match="property[@name='rate_sum']">
        <xsl:if test="normalize-space(value) != ''">
          <div>
            <xsl:text>Бренд: </xsl:text>
            <xsl:apply-templates select="value"/>
          </div>
        </xsl:if>
      </xsl:template>
    </xsl:stylesheet>


    6. Тк файл тут не выкладывался, отправил запатченный обратно отправителю.