【发布时间】:2014-01-09 16:57:24
【问题描述】:
美好的一天,所以我有这个传递给 xslt 的示例 xml 文件:(我将使用的实际 xml 更长)
<RecordMerge>
<ExistingRecord>
<Record>
<RecordNumber>990000010</RecordNumber>
<Name>Michel Duchovskiy</Name>
<Gender />
<Address>
<Street>555 Ocean Blvd</Street>
<City>Atlantic City</City>
<Zip>23345</Zip>
</Address>
</Record>
</ExistingRecord>
<NewRecord>
<Record>
<RecordNumber>990000010</RecordNumber>
<Name>Mick Dick</Name>
<Gender>Male</Gender>
<MaritalStatus>Married</MaritalStatus>
<Address>
<Street>123 Sunset Blvd</Street>
<City>Beverly Hills</City>
<Zip>90210</Zip>
</Address>
</Record>
</NewRecord>
</RecordMerge>
所以任务是,ExistingRecord/Record 内容需要用 NewRecord/Record 内容更新。忘了说它不需要根据RecordNumber进行匹配。匹配是预先完成的,传递给此 xslt 的 XML 将始终具有相同的结构。 RecordMerge 根总是有两个孩子,所以永远不需要匹配。
合并条件:
-当元素没有子元素(如性别、姓名)时:
- 如果元素在 Existing 中为空白 - 更新值
- 如果元素是新元素且不在 Existing 中,则添加到结果中
-当元素有子元素时(比如我们,如果它是像地址这样的列表):
- 更新内容
否则,ExistingRecord/Record 中的元素应该保持不变。
结果应该是这样的:
<Record>
<Name>Michel Duchovskiy</Name>
<Gender>Male</Gender>
<MaritalStatus>Married</MaritalStatus>
<Address>
<Street>123 Sunset Blvd</Street>
<City>Beverly Hills</City>
<Zip>90210</Zip>
</Address>
</Record>
如您所见,名称保持不变,添加了性别值(因为它是空的)并且地址已更新。这只是一个示例,因为 xml 包含数百个不同的列表和元素。
不知道怎么做,因为它比简单的合并要复杂得多。谢谢。
【问题讨论】:
标签: xml xslt merge conditional