返回与具有相同名称的其他元素相同的路径中的元素值

时间:2014-08-20 10:34:53

标签: xml xslt xpath xml-attribute

我目前正在开发一个读取xml并将特定值返回到文档中的解析器。 我有一点奇怪的XML,我不知道如何处理。这是一个例子:

<record>
<field name="Agreement_Role:addonSection.effectiveStartTime">15/08/2014</field>
<field name="Agreement_Role:addonSection.effectiveEndTime">31/12/9999</field>
<field name="Agreement_Role:addonSection.addonProduct">Gen</field>
<field name="Agreement_Role:addonSection.addonType">ProtectPlus</field>
<field name="Agreement_Role:addonSection.premium">21.70</field>
<field name="Agreement_Role:addonSection.displayOrder">2</field>
<field name="Agreement_Role:addonSection.replaceAddonType">ProtectPlus</field>
<field name="Agreement_Role:addonSection.addonCode">ProtectPlus</field>
<field name="Agreement_Role:addonSection.status">Live</field>
<field name="Agreement_Role:addonSection.cancellationRefund">00</field>
<field name="Agreement_Role:addonSection.effectiveStartTime">15/08/2014</field>
<field name="Agreement_Role:addonSection.effectiveEndTime">31/12/9999</field>
<field name="Agreement_Role:addonSection.addonProduct">Gen</field>
<field name="Agreement_Role:addonSection.addonType">Bd 1</field>
<field name="Agreement_Role:addonSection.premium">35.85</field>
<field name="Agreement_Role:addonSection.displayOrder">4</field>
<field name="Agreement_Role:addonSection.replaceAddonType">Breakdown</field>
<field name="Agreement_Role:addonSection.addonCode">Bd 1</field>
<field name="Agreement_Role:addonSection.status">Live</field>
<field name="Agreement_Role:addonSection.cancellationRefund">00</field>
<field name="acceptanceType">tacitCard</field>
<field name="Type">default</field>
<field name="effectiveDate">17/08/2014 00:00:00 BST</field>
<field name="expiryDate">16/08/2015 23:59:59 BST</field>
<field name="creationDate">15/08/2014 13:27:52 BST</field>
<field name="acceptanceDate">15/08/2014 13:43:27 BST</field>
#other elements follow this format
</record>

此示例中包含两个附加组件。我想使用addonType字段来指定加载项是否存在,如果存在,则显示相关的溢价。

附加组件不会分为父元素。我提供的样本就是我得到的一切。那么我如何在相同名称和路径的两个高级元素之间进行选择呢?

如果有帮助,元素将始终处于相同的顺序,但我希望避免使用它,以后将来更改。

由于

1 个答案:

答案 0 :(得分:2)

  

如果它有帮助,元素将始终处于相同的顺序,但我希望避免使用它,以后它将被更改。

从您的示例中,排序似乎是唯一对相关元素进行分组的元素 - 从一个effectiveStartTime到第一个cancellationRefund的元素序列构成一个组,下一个组从下一个组开始{ {1}}等等。

如果您知道字段名称的集合是固定的,我想假设另一种解释,就是迭代一个特定字段名称的所有实例,然后按位置拉出相关字段,即< / p>

effectiveStartTime

因此对于 n th <xsl:for-each select="field[@name='Agreement_Role:addonSection.effectiveStartTime']"> <xsl:variable name="pos" select="position()" /> <addon> <effectiveStart><xsl:value-of select="."/></effectiveStart> <effectiveEnd> <xsl:value-of select=" ../field[@name='Agreement_Role:addonSection.effectiveEndTime'][$pos]" /> </effectiveEnd> <!-- and so on for the other field names --> </addon> </xsl:for-each> ,您需要提取 n effectiveStartTime等。这样就可以显示字段任何交错,只要同名字段之间的排序是一致的,例如

effectiveEndTime

会得到相同的结果。