2012-09-17 54 views
0

我有以下问题,给出这个XML数据结构网络化:数据处理,如何处理

<level1> 
<level2ElementTypeA></level2ElementTypeA> 
<level2ElementTypeB> 
    <level3ElementTypeA>String1Ineed<level3ElementTypeB> 
</level2ElementTypeB> 
... 
<level2ElementTypeC> 
    <level3ElementTypeB attribute1> 
     <level4ElementTypeA>String2Ineed<level4ElementTypeA> 
    <level3ElementTypeB> 
<level2ElementTypeC> 
... 
<level2ElementTypeD></level2ElementTypeD> 
</level1> 
<level1>...</level1> 

我需要创建一个实体包含:String1Ineed和String2Ineed。

所以每次我碰到一个level3ElementTypeB中附带ATTRIBUTE1一定值的时候,我有我的String2Ineed。丑陋的部分是如何获取String1Ineed,该String1Ineed位于当前level2ElementTypeC之上的level2ElementTypeB类型的第一个元素中。

我“必须”的解决方案看起来像我总是不断地与String1Ineed的最后一个值的变量,如果我打标准String2Ineed,我简单地使用。如果我们从简单的收集处理角度来看这个问题。你将如何建模String1Ineed和String2Ineed之间的回溯逻辑?使用State Monad?

+0

您是否使用了特定的功能性的语言,或者这是一个普遍的问题? – pat

回答

1

这不是什么XPATH是?您可以找到String2Ineed,然后更改轴以搜索String1Ineed。

+0

你有没有注意到:levelElementType?我可以很容易找到字符串2Ineed,但我只需要JUST上一个元素。也许拉链可以帮助 – AndreasScheinert

+0

是的,昨天晚上我看到这个后,我为'Data.Tree'写了一个拉链。不过,我没有看到XPATH的问题。它有一组非常灵活的轴说明符,允许您从给定点向后搜索。 – pat