Nano Hash - криптовалюты, майнинг, программирование

Как выполнить итерацию по узлам просмотра, возвращенным с помощью вызова поиска драгоценных камней amazon-ecs?

Я пишу внутреннее приложение для мониторинга наших продуктов, перечисленных на Amazon, и застрял с Amazon Product Advertising API (amazon-ecs ) Рубиновый драгоценный камень. Я хотел бы отобразить на экране узлы просмотра, подобные этому:

«корневая категория» -> все подкатегории -> конечная категория (фактическая категория, в которой находится элемент)

    <BrowseNode>
<BrowseNodeId>770071031</BrowseNodeId>
<Name>Robotic Vacuums</Name>
<Ancestors>
  <BrowseNode>
  <BrowseNodeId>125698031</BrowseNodeId>
  <Name>Vacuums</Name>
    <Ancestors>
    <BrowseNode>
    <BrowseNodeId>3147711</BrowseNodeId>
    <Name>Vacuums &amp; Floor Care</Name>
      <Ancestors>
        <BrowseNode>
        <BrowseNodeId>3576359031</BrowseNodeId>
        <Name>Vacuuming, Cleaning &amp; Ironing</Name>
          <Ancestors>
            <BrowseNode>
            <BrowseNodeId>391784011</BrowseNodeId>
            <Name>Kitchen &amp; Home Appliances</Name>
              <Ancestors>
              <BrowseNode>
              <BrowseNodeId>3147411</BrowseNodeId>
              <Name>Categories</Name>
              <IsCategoryRoot>1</IsCategoryRoot>
                <Ancestors>
                <BrowseNode>
                <BrowseNodeId>11052681</BrowseNodeId>
                <Name>Kitchen &amp; Home</Name>
                  <Ancestors>
                  <BrowseNode>
                  <BrowseNodeId>11052591</BrowseNodeId>
                  <Name>Home &amp; Garden</Name>
                  <Ancestors>
                    <BrowseNode>
                    <BrowseNodeId>3146281</BrowseNodeId>
                    <Name>Home &amp; Garden</Name>
                    </BrowseNode>
                  </Ancestors>
                </BrowseNode>
                </Ancestors>
                </BrowseNode>
              </Ancestors>
            </BrowseNode>
            </Ancestors>
          </BrowseNode>
          </Ancestors>
        </BrowseNode>
      </Ancestors>
    </BrowseNode>
  </Ancestors>
  </BrowseNode>
</Ancestors>
</BrowseNode>

Таким образом, приведенное выше должно отображаться как:

Дом и сад -> Кухня и дом -> Кухня и бытовая техника -> Уборка пылесосом, чистка и глажка -> Пылесосы и уход за полом -> Пылесосы

Я пробовал get_array и get_hash, но все они возвращают значение только одной длинной строки.

Есть ли способ легко сделать то, что я хочу сделать, используя драгоценный камень amazon-ecs, или мне следует обработать строку как XML и попытаться зациклить это соответствующим образом?


  • Покажите нам, что вы пробовали, чтобы мы не тратили время на изобретение вашего велосипеда. 18.03.2014
  • Почему <Name>Categories</Name> не имеет значения? Как бы вы решили не включать его? 18.03.2014

Ответы:


1

Это простой способ добраться туда. Без каких-либо критериев, показывающих, как вы определяете, какие узлы <Name> приемлемы, это возвращает их все:

require 'nokogiri'

xml = <<EOT
<BrowseNode>
<BrowseNodeId>770071031</BrowseNodeId>
<Name>Robotic Vacuums</Name>
<Ancestors>
  <BrowseNode>
  <BrowseNodeId>125698031</BrowseNodeId>
  <Name>Vacuums</Name>
    <Ancestors>
    <BrowseNode>
    <BrowseNodeId>3147711</BrowseNodeId>
    <Name>Vacuums &amp; Floor Care</Name>
      <Ancestors>
        <BrowseNode>
        <BrowseNodeId>3576359031</BrowseNodeId>
        <Name>Vacuuming, Cleaning &amp; Ironing</Name>
          <Ancestors>
            <BrowseNode>
            <BrowseNodeId>391784011</BrowseNodeId>
            <Name>Kitchen &amp; Home Appliances</Name>
              <Ancestors>
              <BrowseNode>
              <BrowseNodeId>3147411</BrowseNodeId>
              <Name>Categories</Name>
              <IsCategoryRoot>1</IsCategoryRoot>
                <Ancestors>
                <BrowseNode>
                <BrowseNodeId>11052681</BrowseNodeId>
                <Name>Kitchen &amp; Home</Name>
                  <Ancestors>
                  <BrowseNode>
                  <BrowseNodeId>11052591</BrowseNodeId>
                  <Name>Home &amp; Garden</Name>
                  <Ancestors>
                    <BrowseNode>
                    <BrowseNodeId>3146281</BrowseNodeId>
                    <Name>Home &amp; Garden</Name>
                    </BrowseNode>
                  </Ancestors>
                </BrowseNode>
                </Ancestors>
                </BrowseNode>
              </Ancestors>
            </BrowseNode>
            </Ancestors>
          </BrowseNode>
          </Ancestors>
        </BrowseNode>
      </Ancestors>
    </BrowseNode>
  </Ancestors>
  </BrowseNode>
</Ancestors>
</BrowseNode>
EOT
doc = Nokogiri::XML(xml)

Вот код для поиска узлов:

doc.search('Name').map(&:text).reverse.uniq.join(' -> ')
# => "Home & Garden -> Kitchen & Home -> Categories -> Kitchen & Home Appliances -> Vacuuming, Cleaning & Ironing -> Vacuums & Floor Care -> Vacuums -> Robotic Vacuums"

Некоторые записи дублируются, поэтому uniq удалит их.

См. «Как избежать объединения всего текста с узлов при очистке." также.

18.03.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..