XPath с использованием получения данных из XML - Pentaho

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

          <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>

person eponkratova    schedule 26.09.2019    source источник


Ответы (1)


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

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

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

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

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

Снимок экрана с примером преобразования для этого

person Cyrus    schedule 26.09.2019