• Как составить jsonpath запрос?

    @Roman-Fov
    Json
    {
      "cities": [
          { "name": "London", "population": 8615246 },
          { "name": "Berlin", "population": 3517424 },
          { "name": "Madrid", "population": 3165235 },
          { "name": "Rome",   "population": 2870528 }
      ]
    }

    Query
    $.cities[?(@.population == 8615246)] }
    Result
    [
      {
        "name": "London",
        "population": 8615246
      }
    ]


    Оно?
    Ответ написан
  • Как составить XPath выражение?

    @Roman-Fov
    /root/span[translate(@style, '; ', '') = 'text-decoration:underline']
    Ответ написан
    Комментировать
  • XPath и даты, можно ли делать условные запросы?

    @Roman-Fov
    Да. Делать запросы, включая довольно сложные к xml можно.
    Да. И с числами всё будет ок. И со строками тоже.
    Ну... и с датами тоже. Нам будет сложно, но мы справимся.

    Но зачем?
    XML не создавался как решение проблемы с хранением данных.
    Он для этого не предназначен.
    А базы данных предназначены для хранения данных.

    Записи вида "дата + пара чисел + комментарий" действительно смотрятся в нём органично, ровно как записи любого другого вида и структуры.
    Но более органично представятся записи такого вида в таблице бд.

    При всех своих недостатках перед базами, xml не предоставляет никаких преимуществ пред ними.
    Ответ написан
    Комментировать
  • Как в xPath, при поиске, не учитывать пустые узлы?

    @Roman-Fov
    Всё просто если разбить на части

    1. Посмотрим текстовое содержимое всех ссылок и отсечём те, что не пусты.
    2. Посчитаем детей и оставим только элементы с одним ребёнком
    3. Готово

    XML
    <root>
    	<a href="#"><img src="image1.jpg" /></a>
    	<a href="#">    <img src="image2.jpg" />    </a>
    	<a href="#">
    	  <img src="image3.jpg" />
    	</a>
    	<a href="#">
    	  <img src="image4.jpg" />
    	  <img src="image5.jpg" />
    	</a>
    	<a href="#">
    	  <img src="image6.jpg" />
    	  Изображение с изображением изображения
    	</a>
    	<a href="#"><img src="image7.jpg" />Изображение с изображением изображения</a>
    </root>


    XPath
    /root/a[normalize-space(translate(., ' ', '')) = '' and count(*) = 1]/img


    Result
    Element='<img src="image1.jpg"/>'
    Element='<img src="image2.jpg"/>'
    Element='<img src="image3.jpg"/>'
    Ответ написан
    Комментировать
  • Как добыть svg и тег из него?

    @Roman-Fov
    //*[name()='svg' and @class="icon miniCard__icon"]/@viewBox


    Оно?

    5d00d2aade824973060137.png
    Ответ написан
    4 комментария
  • Парсинг сайтов xpath?

    @Roman-Fov
    Сам Xpath не такая обширная тема. Если и есть книга только по нему, то она не более 50 страниц. Там под пол сотни функций и с десяток осей.

    Если быстро разобраться, то mdn наше всё.
    Если просто почитать, то любая книга зарубежного издательства в названии или описании которой будет XML. Там обязательно будет глава про Xpath.
    Ответ написан
    Комментировать
  • Как исключить div с display none?

    @Roman-Fov
    там проблема у вас в самом начале запроса
    А именно задесь:
    //div[not(contains(@style, 'none'))]

    Этим хотели отсечь скрытые .bx_slider_conteiner, но по факту выбирает не их, а .bx_slide
    Отсюда и вся эта песня
    Ответ написан
  • Как получить текст data-url в теге a?

    @Roman-Fov
    Так
    div[@class='element most_wanted']//div[@class='info']/p[@class='name']/a[@class='js-serp-metrika']/@data-url


    Или если не робит, то так
    string(div[@class='element most_wanted']//div[@class='info']/p[@class='name']/a[@class='js-serp-metrika']/@data-url)


    Последнее это прям значение
    Ответ написан
    Комментировать
  • Как найти значение?

    @Roman-Fov
    C селениумом не знаком, но попробуйте это
    //select[@name = 'LAMP[]']/option[@value = 'yellow']
    Ответ написан
  • Как разобрать строку в XSLT по разделителю?

    @Roman-Fov
    XML
    <cart>
    	<dimensions>15.2/44/13.5</dimensions>
    </cart>


    XSLt
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:template match="/cart">
    		<div>
    			<xsl:text>Ширина: </xsl:text>
    			<xsl:value-of select="substring-before(dimensions, '/')"/>
    		</div>
    		<div>
    			<xsl:text>Высота:</xsl:text>
    			<xsl:value-of select="substring-before(substring-after(dimensions, '/'), '/')"/>
    		</div>
    		<div>
    			<xsl:text>Глубина:</xsl:text>
    			<xsl:value-of select="substring-after(substring-after(dimensions, '/'), '/')"/>
    		</div>
    	</xsl:template>
    </xsl:stylesheet>


    Result
    <div>Ширина: 15.2</div>
    <div>Высота:44</div>
    <div>Глубина:13.5</div>


    Оно?
    Ответ написан
    2 комментария
  • Как трансформировать XML с помощью XQuery?

    @Roman-Fov
    Так всё просто. Нужно выбрать элементы содержащие в себе определённый год. Сделать это можно так (для 2018):
    /ScheduleTable/Schedule[Year = '2018']/Item
    Для других год только менять и писать куда надо
    Ответ написан
    Комментировать
  • Как проверить существует ли участок дерева в XML?

    @Roman-Fov
    Так посчитать их же
    XML
    <root>
    	<foo>
    		<bar>
    			<baz>asdf</baz>
    			<text>text1</text>
    		</bar>
    	</foo>
    	<foo>
    		<bar>
    			<text>text2</text>
    		</bar>
    	</foo>
    	<foo>
    		<bar>
    			<baz>3</baz>
    			<text>text3</text>
    		</bar>
    	</foo>
    </root>


    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="/root">
        <xsl:apply-templates select="foo"/>
      </xsl:template>
    
      <xsl:template match="foo">
        <h1 style="color:red;">
          <xsl:attribute name="style">
            <xsl:choose>
              <xsl:when test="count(bar/baz) &gt; 0">
                <xsl:text>color: red;</xsl:text>
              </xsl:when>
              <xsl:otherwise>
                <xsl:text>color: green;</xsl:text>
              </xsl:otherwise>
            </xsl:choose>
          </xsl:attribute>
          <xsl:apply-templates select="bar/text"/>
        </h1>
      </xsl:template>
    </xsl:stylesheet>


    Result
    <h1 style="color: red;">text1</h1>
    <h1 style="color: green;">text2</h1>
    <h1 style="color: red;">text3</h1>
    Ответ написан
    Комментировать
  • Как выбрать элемент который появляется после загрузки?

    @Roman-Fov
    //div[@id = 'preloader' and not(@style)]
    //div[@id = 'preloader' and @style = 'display: none;']
    Ответ написан
    1 комментарий
  • Можно ли сделать чтобы высота зависела от ширины?

    @Roman-Fov
    Накидал по быстрому. Оставил это здесь:
    https://jsfiddle.net/jr87acqg/1/

    Двигаем ширину блока и смотрим
    Ответ написан
    Комментировать
  • Xpath в css selector, как правильно будет в моем случае?

    @Roman-Fov
    Вам вроде для ublock...

    Вот сделал запрос похожий. Для другого блока только тк неясно где искать этот

    e.mail.ru##:xpath(//div[normalize-space(.)='Выбрать тему оформления']/parent::*/parent::*)

    И он работает.
    Если не работает, то нужна ссылка на тот, который хотим скрыть
    Ответ написан
    Комментировать
  • Почему в Google Chrome и в Opera не открывается xml-файл с подключённым к нему xsl-стилями?

    @Roman-Fov
    Всё он работает. Только нужно предварительно закрыть все другие окна хрома. Если он работает в фоне, то убить все его процессы. Только тогда запускать его с флагом --allow-file-access-from-files.
    Работает во всех браузерах основанных на Chromium.
    Или создать сервер (денвер или что там сейчас на винде) и обращаться к файлам через http. Тогда этой ошибки возникать не будет вообще без флагов всяких.
    Ответ написан
    3 комментария
  • Как делать xslt-преобразование для длинных xml-файлов?

    @Roman-Fov
    Если отличается структурой элемент, то придётся обрабатывать отдельно.
    Если есть общие черты, то можно вместе. Перечисляйте их в apply-templates select и template match.

    XML
    https://pastebin.com/DeN4rRnY

    XSLt
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0"
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
      <xsl:template match="/root/APPLICATION">
        <html>
        <body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;">
        <h1><xsl:value-of select="root/APPLICATION/@NAME"/> </h1>
          <table border="1">
            <tr>
              <td>ID</td>
              <td>Deleted</td>
              <td>IsLocked</td>
              <td>RetriveTime</td>
              <td>ChangeTime</td>
              <td>AccessTime</td>
              <td>SecureStyleID</td>
              <td>Name</td>
              <td>DBName</td>
              <td>TheComment</td>
            </tr>
            <xsl:apply-templates select="MTZAPP_COL/MTZAPP | OBJECTMODE_COL/OBJECTMODE"/>
          </table>
      </body>
      </html>
      </xsl:template>
    
      <xsl:template match="MTZAPP_COL/MTZAPP | OBJECTMODE_COL/OBJECTMODE">
        <tr>
          <td><xsl:value-of select="@ID"/></td>
          <td><xsl:value-of select="@Deleted"/></td>
          <td><xsl:value-of select="@IsLocked"/></td>
          <td><xsl:value-of select="@RetriveTime"/></td>
          <td><xsl:value-of select="@ChangeTime"/></td>
          <td><xsl:value-of select="@AccessTime"/></td>
          <td><xsl:value-of select="@SecureStyleID"/></td>
          <td><xsl:value-of select="@Name"/></td>
          <td><xsl:value-of select="@DBName"/></td>
          <td><xsl:value-of select="@TheComment"/></td>
        </tr>
      </xsl:template>
    </xsl:stylesheet>


    Result
    https://pastebin.com/PizDCL0M

    PS циклы в XSLt не есть хорошо. Те я хочу сказать, что нужно избегать циклов в пользу apply templates везде, где это возможно. Они усложняют таблицы, делают невозможным повторное использование и вообще противоречит идеологии инструмента
    Ответ написан
    Комментировать
  • Где ошибка в моем XPath селекторе?

    @Roman-Fov
    XML
    <div>
    	<div class="asdf wrapper">
    		<table>
    			<tr class="table__row">
    				<td>
    					<span class="campaign-info-number">302177</span>
    				</td>
    			</tr>
    			<tr class="table__row">
    				<td>
    					<span class="campaign-info-number">302178</span>
    				</td>
    			</tr>
    			<tr class="table__row">
    				<td>
    					asdf
    				</td>
    			</tr>
    		</table>
    	</div>
    </div>


    XPath
    //div[contains(@class, 'wrapper')]//tr[contains(@class, 'table__row') and .//span[contains(@class, 'campaign-info-number')]/text() = '302177']


    Result
    <tr class="table__row">
    	<td>
    		<span class="campaign-info-number">302177</span>
    	</td>
    </tr>
    Ответ написан
    Комментировать
  • Как спарсить "Цвет" в таблице из div с помощью xpath для datacol?

    @Roman-Fov
    Задействуйте вложенные запросы и задача станет весьма тривиальной:

    XPath
    //div[@class = 'item-card-detailed__table_column item-card-detailed__table_column-second']/div[position() = count(//div[@class = 'item-card-detailed__table_column']/div[text() = 'Цвет']/preceding-sibling::div)+1]
    Ответ написан
    1 комментарий
  • В чем плюсы и минусы разбора XML через xpath?

    @Roman-Fov
    Сложно судить о плюсах и минусах если нет альтернатив. Всё что есть, так или иначе использует xpath. Стандарт для разбора xml.

    Если нужны именно минусы, то это хреновая работа со строками и наборами узлов. И вложенные запросы хочется тоже. Но если посмотреть как устроены запросы к документу в css, то становится понятно, что зажрался совсем и всё тут хорошо на самом деле)
    Ответ написан
    Комментировать