示例XML:
<ProductRevision id="id38" name="Item1" accessRefs="#id4" subType="ItemRev" masterRef="#id36" revision="A">
<UserData id="id39">
<UserValue value="2015-08-11T16:46:20" title="date_released"></UserValue>
</UserData>
</ProductRevision>
<ProductRevision id="id53" name="Item2" accessRefs="#id4" subType="ItemRev" masterRef="#id51" revision="A">
<UserData id="id40">
<UserValue value="2015-08-07T13:57:42" title="date_released"></UserValue>
</UserData>
</ProductRevision>
<ProductRevision id="id68" name="Item2" accessRefs="#id4" subType="ItemRev" masterRef="#id66" revision="A">
<UserData id="id41">
<UserValue value="2015-08-06T13:57:42" title="date_released"></UserValue>
</UserData>
</ProductRevision>
<Product id="id36" name="Item1" accessRefs="#id4" subType="Item" productId="1234">
<ApplicationRef version="g7cVc2GTznicWC" application="Teamcenter" label="g7cVc2GTznicWC"></ApplicationRef>
<AssociatedForm id="id50" role="IMAN_master_form" formRef="#id48"></AssociatedForm>
</Product>
<Product id="id51" name="Item2" accessRefs="#id4" subType="Item" productId="BXU004846">
<ApplicationRef version="gLZVMV_wznicWC" application="Teamcenter" label="gLZVMV_wznicWC"></ApplicationRef>
<AssociatedForm id="id65" role="IMAN_master_form" formRef="#id63"></AssociatedForm>
</Product>
<Product id="id66" name="Item3" accessRefs="#id4" subType="Item" productId="BXU004848">
<ApplicationRef version="weVVMpxFznicWC" application="Teamcenter" label="weVVMpxFznicWC"></ApplicationRef>
<AssociatedForm id="id80" role="IMAN_master_form" formRef="#id78"></AssociatedForm>
</Product>
<Form id="id48" name="1234" accessRefs="#id4" subType="Item Master" subClass="Item Master">
<UserData id="id49" type="FormAttributes">
<UserValue value="Class1" title="form_type"></UserValue>
</UserData>
</Form>
<Form id="id63" name="BXU004846" accessRefs="#id4" subType="Item Master" subClass="Item Master">
<UserData id="id64" type="FormAttributes">
<UserValue value="Class1" title="form_type"></UserValue>
</UserData>
</Form>
<Form id="id78" name="BXU004848" accessRefs="#id4" subType="Item Master" subClass="Item Master">
<UserData id="id79" type="FormAttributes">
<UserValue value="Class2" title="form_type"></UserValue>
</UserData>
</Form>
在上面的xml中, - ProductRevision节点通过“masterRef”值与产品节点相关。 ProductRevision上的'masterRef'id 等于Product节点上的'id'值。 - Product节点通过'formRef'值与Form节点相关。 Product / AssociatedForm / formRef上的'formRef'id是 等于Form节点的'id'值。 在上面的例子中,我必须找到具有form_type'Class1'的ProductRevision的最新date_released(form_type value在Form节点中。
例如,要查找第一个ProductRevision节点是否为Class1类型: - 转到产品节点(id36)并获取其formRef id(id48) - product / AssociatedForm / formRef - 搜索id值为id48的表单xml节点。在Form节点中,获取form_type值并检查其是否为“Class1”。 - 如果是Class1,要获得date_released,我们必须转到相应的ProductRevision节点。 - 使用masterRef值搜索ProductRevision节点作为id36。从DateReleased形式获取ProductRevision节点。
我能够编写逻辑来遍历节点并检查form_type值并获取date_released,但仍坚持如何从这些节点获取最新的date_released。 要求是获取ProductRevision的最新date_released,并将form_type作为“Class1”。
答案 0 :(得分:-1)
您最近的更新为您的问题带来了很多复杂性。我已经在这些步骤中重构了这个方法:
UserValue
个节点与form_type = Class1 AssociatedForm
与formRef
匹配。ProductRevision
与masterRef
匹配,按标题= date_released的降序value
进行排序。XSL:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="4.01" encoding="ISO-8859-1"/>
<xsl:template match="/root">
<html>
<body>
<!--Step 1-->
<xsl:apply-templates select="Form/UserData/UserValue[@title='form_type' and @value='Class1']"></xsl:apply-templates>
</body>
</html>
</xsl:template>
<xsl:template match="UserValue">
<!--Step 2-->
<xsl:variable name="refId">#<xsl:value-of select="../../@id"/></xsl:variable>
<xsl:apply-templates select="//AssociatedForm[@formRef=$refId]"/>
</xsl:template>
<xsl:template match="AssociatedForm">
<!--Step 3-->
<xsl:variable name="refId">#<xsl:value-of select="../@id"/></xsl:variable>
<xsl:variable name="datereleased"><xsl:apply-templates select="//ProductRevision[@masterRef=$refId]/UserData/UserValue[@title='date_released']" mode="max"><xsl:sort select="@value" data-type="text" order="descending"/></xsl:apply-templates></xsl:variable>
<p>datereleased=<xsl:value-of select="$datereleased"/></p>
</xsl:template>
<xsl:template match="UserValue" mode="max">
<!--Step 4-->
<xsl:if test="position()=1"><xsl:value-of select="@value"/></xsl:if>
</xsl:template>
</xsl:stylesheet>