XPath 使用从 XML 获取数据 - Pentaho

Posted

技术标签:

【中文标题】XPath 使用从 XML 获取数据 - Pentaho【英文标题】:XPath using Get data from XML - Pentaho 【发布时间】:2019-09-26 01:47:34 【问题描述】:

我正在调用 Xero 的 API,然后使用从 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】:

对于像这样的复杂 XML 结构,最好使用 Pentaho 中嵌套的 Get Data from XML 步骤。

在您的示例中(缺少根元素并关闭 /rows btw),XML 看起来代表类似于 Excel 的“带单元格的行”结构。单元格可能属于一列,具体取决于它们的顺序。对于这个答案,我假设这个顺序在 XML 中确实是固定的,并且没有丢失的单元格。验证一下!

第一个 XML 步骤应该将每个 XML“行”提取到 Pentaho 行并返回 XML 节点,而不仅仅是一个值。为此,您可以使用 Loop XPath 设置 /YourRoot/Rows/Row 并使用 XPath "Cells" 和 Result type "单节点”。包含 rownum 字段可能会很好,如果需要,请选择该选项。

然后,第二个 XML 步骤可以使用第一步的输出字段,从 Loop XPath /Cells/Cell 中提取并使用“获取字段”按钮获取您需要的所有字段。

获得字段后,使用 Select Values 步骤删除原始 XML 字段,然后使用 Row Flattener(仅适用于固定单元格顺序)。

【讨论】:

以上是关于XPath 使用从 XML 获取数据 - Pentaho的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XML::XPath 获取属性?

使用 XPath 查询从 XML 中获取值

使用xpath从xml获取子节点值

如何在 Java 中使用 XPath 从 XML 中获取特定节点?

如何使用 XPATH 从 XML 中解析和获取准确的结果

从 XML 节点 java 生成/获取 xpath