- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在学习 Talend,我需要一个 XML 到 CSV 的映射,但我无法正常工作。
我有一个这样的文档(非常简单):
<Report>
<Payment>
<Reference Type="1" Value="wathever11"/>
<Reference Type="2" Value="wathever12"/>
<Amount value="222"/>
</Payment>
<Payment>
<Reference Type="1" Value="wathever22"/>
<Reference Type="3" Value="wathever23"/>
<Amount value="123242"/>
</Payment>
<Payment>
<Reference Type="3" Value="wathever33"/>
<Reference Type="2" Value="wathever32"/>
<Amount value="12976"/>
</Payment>
<Payment>
<Reference Type="1" Value="wathever41"/>
<Reference Type="4" Value="wathever44"/>
<Amount value="1456"/>
</Payment>
<Payment>
<Amount value="12976"/>
</Payment>
</Report>
因此,我可以没有多个引用,最多可以有 4 个不同的类型。
我需要像这样将其转换为 CSV:
ReferenceType1, ReferenceType2, ReferenceType3, ReferenceType4, Amount
whatever11 , whatever12 , , , 222
, whatever22 , whatever23 , , 123242
, whatever32 , whatever33 , , 12976
whatever41 , , , whatever44 , 1456
, , , , 12976
为此,我创建了这个简单的结构:
在 XMLFileInput 中,这是配置:
付款是文件
在 tXMLMap 中我设置了这样的文档结构:
Report
└──Payment (loop) First case, see below
├── Reference (loop) Second case, see below
| ├── @Type
| └── @Value
└── Amount
└── @Value
在输出表中,我使用如下表达式为每个引用创建一列:
[row1.Payment:/Payment/Reference/@Type].equals("1")? [row1.Payment:/Payment/Reference/@Value]: ""
但是,我无法映射同一行中的所有引用。如果在支付级别设置循环,我得到这个:
ReferenceType1, ReferenceType2, ReferenceType3, ReferenceType4, Amount
whatever11 , , , , 222
, , , , 123242
, , , , 12976
whatever41 , , , , 1456
, , , , 12976
如果循环设置在引用级别,我会为每个引用获得一个新行,如下所示:
ReferenceType1, ReferenceType2, ReferenceType3, ReferenceType4, Amount
whatever11 , , , , 222
, whatever12 , , , 222
, whatever22 , , , 123242
, , whatever23 , , 123242
, , whatever33 , , 12976
, whatever32 , , , 12976
whatever41 , , , , 1456
, , , whatever44 , 1456
没有引用的元素没有行。
必须有一种方法可以达到预期的结果。我尝试创建一个中间步骤,将每个引用映射到不同的表以及一个序列号,以进一步将列合并为一行。
虽然我还没有完成,但我认为这可能是一条路要走。但是引用并不是我需要它的唯一元素。我得到了很多在真实 xml 中发生这种情况的元素,并且像这样的中间表的数量会很大。
所以我更愿意征求专家的意见,试图找到一种更简单的方法来做到这一点。
有什么想法吗?
最佳答案
好消息:这可以通过 tExtractXMLField 实现。查看我提出的解决方案:
我的输出是基于您输入的 xml,但它与您预期的输出不同,请仔细检查:
.-------------------+-------------------+-------------------+-------------------+------.
| tLogRow_1 |
|=------------------+-------------------+-------------------+-------------------+-----=|
|referenceTypeValue1|referenceTypeValue2|referenceTypeValue3|referenceTypeValue4|amount|
|=------------------+-------------------+-------------------+-------------------+-----=|
|wathever11 |wathever12 |null |null |222 |
|wathever22 |null |wathever23 |null |123242|
|null |wathever32 |wathever33 |null |12976 |
|wathever41 |null |null |wathever44 |1456 |
|null |null |null |null |12976 |
'-------------------+-------------------+-------------------+-------------------+------'
坏消息:Talend 5.3.1 中的 tXMLMap 对我来说是不可能的。我试图将其放入 tXMLMap 的表达式字段中:[row2.doc:/Report/Payment/Reference[@Type=1]/@Value] 但是由于额外的括号,我的工作将不再生成
关于xml - Talend tXMLMap 无需循环即可获取所有出现的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26337794/
我想在 Talend 中写入数据库时执行事务,但不知道如何执行。我尝试了调色板中的各种组件,但无法执行。我将不胜感激任何与此主题相关的帮助甚至更好的教程。 谢谢! 最佳答案 Talend 支持在写
我有一个场景,我想根据条件跳过要执行的组件并在 Talend 中运行其连续组件。 有可能吗? 最佳答案 您有两个选项可用于有条件地执行部分工作。 条件检查之后的组件可以是起始组件(如果将其拖放到 Ca
我正在 Talend 中导入 Excel 文件。我想选择“A”列中的所有不同值,然后将该数据转储到数据库中。使用 Talend 可以做到这一点吗?如果没有,有哪些可用的替代方案。感谢任何帮助 最佳答案
我是 Talend 的新手,需要一个示例作业来实现 tLoop。如果失败,我想运行 10 次作业。我查看了文档,但我似乎无法弄清楚这一点。 最佳答案 这个答案有两个部分 使用 tJava 创建循环 重
我是 Talend 的新手,需要一个示例作业来实现 tLoop。如果失败,我想运行 10 次作业。我查看了文档,但我似乎无法弄清楚这一点。 最佳答案 这个答案有两个部分 使用 tJava 创建循环 重
我试图在 Talend 中实现日志记录。所以我使用普通组件做了一份工作,我通过 Twarn 和 Tdie 记录了错误、信息和调试。使用 Logcatcher ,我将日志分为调试和错误两个文件。这部分工
我有一些示例作业可以将数据从一个数据库迁移到另一个数据库,我想了解一些有关当前进度的信息,例如从应用程序本身交互式运行作业时的信息(我从命令行导出并运行它) )。 我使用 flowMeter 和 st
使用 Talend,我想验证是否存在名为 ListePS.xls 的文件在我的 D:/做一些治疗别的没什么。 如何检查 Talend 中是否存在文件? 最佳答案 您必须使用组件 tFileExist
每当我单击“代码”选项卡查看 Talend 作业的 Java 代码时,我都看不到行号。是否有任何设置可以启用行号? 最佳答案 您可以从首选项启用行号 如果您按照此面包屑导航,您将看到显示行号的参数 -
我有一个带有 tMSSqlConnection 设置的作业,并且我需要与 joblet 共享该连接。我在网上找到了说明,说将其注册为共享连接,然后在具有该连接名称的 joblet 组件的动态设置中添加
我正在努力了解 Talend ESB (SE) 运行时的部署架构。 目前我只有一个容器,一切都在路由的默认上下文中运行。这对于 PoC 和开发非常有用,但是当我们进入测试和生产部署时,我希望为不同的环
.properties 文件扩展名用于通过 Talend 中的文件加载上下文变量。在 tFileProperties 中,在选择参数文件的文件格式时,我们有一个下拉列表 .properties 和 .
我无法在 Mac OS 上安装 Talend open studio。错误 - TOS_BD-macosx-cocoa 可执行启动程序无法找到其同伴共享库。 最佳答案 您只需在 TOS 二进制文件文件
我是 talend ETL 工具的新手。我已经在 talend DI(数据集成)工具中创建了作业工作流,现在我想使用 hadoop 切换/实现相同的作业,因为我正在使用 talend 大数据工具。谁能
您好,我正在使用 talend open studio 5.5。我想导出 talend 作业并放入 SVN。它包含以下文件。1)工艺 一).items b).属性 我想从中构建 talend 作业并创
是否可以将 Talend Open Studio 与 Eclipse 结合使用。我想将我的 eclipse 开发(资源)直接作为源代码链接到 talend 并在其中使用我的类。 我想做的是,写例如Ta
我对 Talend 提供的不同产品感到困惑。 看来Talend Open Studio for Data Integration和 Talend Open Studio for Big Data是相同
使用 Talend Big Data Studio。尝试使用 Neo4jConnection 版本 2.x.x,显示错误“组件需要 Java 1.7” 我在 .bash_profile 中设置了 JA
我正在寻找一种如何根据实际文件行在 talend studio 中拆分作业执行的方法 - 我想处理一个作业分支中以“DEBUG”开头的文件行和另一个作业分支中的另一行。那可能吗? 最佳答案 为此,请使
我是 Talend Open Studio 的新手,我想在 Macbook 或 Windows PC 上开发一个作业,然后导出该作业并将其作为计划作业(即 cron)在 Linux 服务器上运行。 这
我是一名优秀的程序员,十分优秀!