【发布时间】:2011-01-17 21:53:15
【问题描述】:
我有一个问题。我有以下源 xml 文件:
来源 xml:
<Container>
<DataHeader>
<c id="b" value="TAG" />
<c id="g" value="Info" />
</DataHeader>
<Data>
<Rows>
<r no="1">
<c id="b" value="uid1" uid="T.A.uid1" />
<c id="g" value="uid1|tag1|attr1|somevalue1" />
</r>
<r no="1">
<c id="b" value="uid1" uid="T.A.uid1" />
<c id="g" value="uid1|tag1|attr2|somevalue2" />
</r>
<r no="2">
<c id="b" value="uid1" uid="T.A.uid1" />
<c id="g" value="uid1|tag2|attr3|somevalue3" />
</r>
<r no="10">
<c id="b" value="uid2" uid="T.A.uid2" />
<c id="g" value="uid2|tag1|attr1|somevalue4" />
</r>
<r no="11">
<c id="b" value="uid2" uid="T.A.uid2" />
<c id="g" value="uid2|tag2|attr3|somevalue5" />
</r>
</Rows>
</Data>
</Container>
id 为“g”的元素“c”在源 xml 中很重要。这是一个连接字符串,其值由“|”分隔。我们需要这些值来制作目标 xml。 id 为“b”的元素“c”可用于分隔“uid”。
价值观的例子和解释:
<c id="g" value="uid1|tag1|attr1|somevalue1" />
**uid value** | element node | **attribute** | attribute value
**uid1** | tag1 | **attr1** |somevalue1
必须将具有相同“uid”的所有元素聚合为 1 个单个“TestTag”元素(请参阅目标 xml)。 需要将具有相同父元素(例如“tag1”)的所有属性(attr1、attr2)添加到 1 个元素。 我只能使用 xslt(xpath) 1.0。
转换后的目标 xml 文件应如下所示。
xsl转换后的目标xml:
<Container>
<TestTag>
<object UID="T.A.uid1" Name="uid1"/>
<tag1 attr1="somevalue1" attr2="somevalue2"/>
<tag2 attr3="*somevalue3"/>
</TestTag>
<TestTag>
<Iobject UID="T.A.uid2" Name="uid2"/>
<tag1 attr1="somevalue4" />
<tag2 attr3="somevalue5"/>
</TestTag>
</Container>
将源 xml 转换为目标 xml 的可能解决方案是什么?我尝试了几件事,但我现在卡住了。
【问题讨论】:
-
+1 不错的第一次问题。欢迎使用 Stack Overflow!