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的主要内容,如果未能解决你的问题,请参考以下文章