2015-10-04 212 views
0

我有一个xml文件,我尝试使用Pentaho Kettle插入到MongoDB中。这是我正在处理的示例节点。Pentaho Kettle - 如何获取XML文件中的所有子节点

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

如果我把我的环路的XPath/AB_SIF/LearningStandardItem,然后我得到我想要的只是我试图让所有年级的节点。当我将字段设置为GradeLevel/@代码时,我只能得到第一个GradeLevel节点。我需要把他们全部弄清楚。我试图将所有级别的级别插入到MongoDB中的数组中。有没有办法做到这一点?

回答

0

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

/LearningStandardItem/GradeLevels/GradeLevel/@Code 

下面是结果

enter image description here

+0

Pentaho中的屏幕是用来测试XPath表达式的吗? – RUEMACHINE

+0

我使用在线服务:http://www.freeformatter.com/xpath-tester.html#ad-output –

+0

我知道xpath一般工作,但它只返回从文件中使用Get XML时Pentaho中的第一个节点。我试图让Pentaho中的所有节点。 – RUEMACHINE

0

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

  1. 将XPATH到/LearningStandardItem/GradeLevels//*

enter image description here

  • 在步骤的getFields部分,设置作为XPATH和@Code元素类型= Attribute
  • enter image description here

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

    enter image description here

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

    希望它有帮助:)

    +0

    这样做会使我获得所有GradeLevel节点,但是那么我无法获得像StatementCode,Statement等其他节点的值。我需要能够获取所有节点的值以及所有GradeLevel节点,或者想出一种方法来分别获取这些值然后合并它们。 – RUEMACHINE