Pentaho Kettle - 如何获取XML文件中的所有子节点

时间:2015-10-04 17:12:52

标签: xml xpath pentaho kettle

我有一个xml文件,我试图使用Pentaho Kettle插入MongoDB。这是我正在处理的示例节点。

<LearningStandardItem RefId="ac4fc887aeef497198822bd233989505" xml:lang="en">
  <StandardHierarchyLevel HierarchyLevelDescription="Level 1">1</StandardHierarchyLevel>
  <ParentItemRefId>ac4fc887aeef497198822bd233989505</ParentItemRefId>
  <StatementCode>LAFS.K12.L</StatementCode>
  <Statement><![CDATA[Language]]></Statement>
  <GradeLevels>
    <GradeLevel Code="KG"/>
    <GradeLevel Code="01"/>
    <GradeLevel Code="02"/>
    <GradeLevel Code="03"/>
    <GradeLevel Code="04"/>
    <GradeLevel Code="05"/>
    <GradeLevel Code="06"/>
    <GradeLevel Code="07"/>
    <GradeLevel Code="08"/>
    <GradeLevel Code="09"/>
    <GradeLevel Code="10"/>
    <GradeLevel Code="11"/>
    <GradeLevel Code="12"/>
  </GradeLevels>
  <SubjectArea Code="10">Language Arts</SubjectArea>
  <LearningStandardDocumentRefId>48c8286c12424beb950194015407afa5</LearningStandardDocumentRefId>
  <SIF_ExtendedElements>
    <SIF_ExtendedElement Name="CCRefId"><![CDATA[CED36FDE-67AD-11DF-AB5F-995D9DFF4B22]]></SIF_ExtendedElement>
  </SIF_ExtendedElements>
</LearningStandardItem>

如果我将我的Loop XPath设置为/ AB_SIF / LearningStandardItem,那么我将获得我想要的所有节点,除了我正在尝试获得所有年级。当我将字段设置为GradeLevel / @ Code时,我只获得第一个GradeLevel节点。我需要把它们全部搞定。我试图将所有成绩级别插入MongoDB中的数组中。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

它会根据需要返回所有代码。

/LearningStandardItem/GradeLevels/GradeLevel/@Code

结果如下

enter image description here

答案 1 :(得分:0)

在PDI 中尝试以下步骤(步骤:从XML获取数据)

  1. 将XPATH设置为/LearningStandardItem/GradeLevels//*
  2. enter image description here

    1. 在该步骤的getFields部分中,将XPATH设置为@Code,将Element type设置为Attribute
    2. enter image description here

      这将获取GradeLevel节点内的所有属性。我附上了gist here

      enter image description here

      或者,您也可以尝试在PDI中使用步骤“XML输入流(StAX)”。它使用StAX解析器来读取所有xml节点和属性。它在大型xml文件的情况下很有用。

      希望有所帮助:)