Использование XPath Получить данные из XML - Pentaho - PullRequest
1 голос
/ 26 сентября 2019

Я вызываю API Xero и затем, используя шаг Получить данные из XML.Как я могу получить Амортизационные расходы - 218,8?Я пробовал / Rows / Row / Cells / Cell / Attributes /.и Rows / Row / Cells / Cell / Value - среди других вариантов, но они не работали.И еще один вопрос: если у меня несколько учетных записей и мне нужно извлечь именно «Расходы на амортизацию», я попытался поиграть с [], чтобы извлечь N-й элемент, но почему-то это не сработало.Это специфика Pentaho?

          <RowType>Section</RowType>
          <Title>Less Operating Expenses</Title>
          <Rows>
            <Row>
              <RowType>Row</RowType>
              <Cells>
                <Cell>
                  <Value>Depreciation Expense</Value>
                  <Attributes>
                    <Attribute>
                      <Value>f14d778f842543feafca2fdcf0437cf7</Value>
                      <Id>account</Id>
                    </Attribute>
                    <Attribute>
                      <Value>f14d778f842543feafca2fdcf0437cf7</Value>
                      <Id>groupID</Id>
                    </Attribute>
                  </Attributes>
                </Cell>
                <Cell>
                  <Value>218.16</Value>
                  <Attributes>
                    <Attribute>
                      <Value>f14d778f842543feafca2fdcf0437cf7</Value>
                      <Id>account</Id>
                    </Attribute>
                    <Attribute>
                      <Value>f14d778f842543feafca2fdcf0437cf7</Value>
                      <Id>groupID</Id>
                    </Attribute>
                  </Attributes>
                </Cell>
              </Cells>
            </Row>

1 Ответ

0 голосов
/ 26 сентября 2019

С такими сложными XML-структурами, как этот, часто лучше использовать вложенные Получить данные из XML шагов в Пентахо.

В вашем примере (который пропускает корневой элемент и закрытие / строкикстати) похоже, что XML представляет собой Excel-подобную структуру «строк с ячейками».Ячейки, вероятно, принадлежат столбцу в зависимости от их порядка.Для этого ответа я предполагаю, что этот порядок действительно зафиксирован в XML, и в нем нет пропущенных ячеек.Убедитесь, что!

Первый шаг XML должен извлечь каждую строку XML в строку Pentaho и вернуть узел XML, а не просто значение.Для этого вы можете использовать параметр Loop XPath / YourRoot / Rows / Row и получить поле с XPath «Ячейки» и Тип результата «Один узел»,Включение поля rownum может быть целесообразным, выберите этот параметр, если он вам нужен.

На втором шаге XML можно использовать поле вывода из первого, извлекая из Loop XPath / Cells / Cellи получение всех необходимых полей с помощью кнопки «Получить поля».

После того, как у вас есть поля, используйте шаг Выбрать значения, чтобы удалить исходные поля XML, а затем используйте Row Flattener (толькоработает для фиксированного заказа Cell).

Screenshot of a sample transformation for this

...