2011-10-24 119 views
2

下面是由不同业务部门提供的XML文件的精简版本。我需要得到的价值是DriverInputSetGoodStudent如何使用XSLT定位xml文档中的特定节点?

这是我很接近这一点:

//session/data/policy/line/child::vehicle[position()=1] 

这让我在XML中的第一辆车,所以后来我就知道车辆的基础上,GoverningDriverIdInfo /项目Id司机的ID 。然后,我需要将该ID与驱动程序节点的ID属性相匹配。然后获取DriverInputSetGoodStudent节点的值。

<session> 
<data> 
    <policy> 
     <line> 
      <driver id="d4A5D51CEC4C14D3C9754A59AE09EFF9B" deleted="0" description="OH Edge, Teresa/321654654"> 
       <DriverTrainingInd>N</DriverTrainingInd> 
       <DriverInputGoodStudent>N</DriverInputGoodStudent> 
       <DriverInputSetDriverTraining>0</DriverInputSetDriverTraining> 
       <DriverInputSetGoodStudent>0</DriverInputSetGoodStudent> 
       <DriverInputAccidentPreventionTrainingDate>2011-05-05</DriverInputAccidentPreventionTrainingDate> 
       <AccidentPreventionCourse>0</AccidentPreventionCourse> 
       <AccidentPreventionCoursePreviousValue>0</AccidentPreventionCoursePreviousValue> 
       <DriverTrainingPrevValue>0</DriverTrainingPrevValue> 
       <DriverOutputGoodStudent>No</DriverOutputGoodStudent> 
      </driver> 
      <vehicle id="v1CFDF4006D7C41D8B8C8A510E4C5C2E1" deleted="0" description="TYTA CAMRY BASE/LE/SE/XLE, 2010, 4T1BF3EK3AU522985"> 
       <VehicleInputPrimaryDriver>d4A5D51CEC4C14D3C9754A59AE09EFF9B</VehicleInputPrimaryDriver> 
       <GoverningDriverIdInfo> 
        <ItemIdList>d4A5D51CEC4C14D3C9754A59AE09EFF9B</ItemIdList> 
        <ItemId>d4A5D51CEC4C14D3C9754A59AE09EFF9B</ItemId> 
       </GoverningDriverIdInfo> 
       <PrimaryDriverID>d4A5D51CEC4C14D3C9754A59AE09EFF9B</PrimaryDriverID> 
       <VehicleGoodStudent>No</VehicleGoodStudent> 
       <VehicleDriverTraining>No</VehicleDriverTraining> 
      </vehicle> 
     <line> 
    <policy> 
<data> 
<session> 

我看到的代码没有在粘贴完全正确,也未在代码块中出现的“结束会话”标签。在此先感谢您的帮助。

回答

1

如果有地方的ID:

<xsl:variable name="driverID" select="data/policy/line/child::vehicle[position()=1]/GoverningDriverIdInfo/ItemId"/> 

您可以直接用它来查找所需的节点:

<xsl:variable name="targetNode" select="data/policy/line/driver[@id = $driverID]/DriverInputSetGoodStudent"/> 

更新答案:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/"> 
    <xsl:for-each select="//session"> 
     <xsl:message terminate="no"> 
     <xsl:value-of select="data/policy/line/driver[@id = current()/data/policy/line/child::vehicle[position()=1]/GoverningDriverIdInfo/ItemId]/DriverInputSetGoodStudent"/> 
     </xsl:message> 
    </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

输出:

[xslt] : Warning! 0 

其中0是所需节点的值。没有使用变量。我认为如何结合仅用于证明概念的两个变量是明确的。

+0

好的。有没有什么办法可以将两部分组合成一行而不使用变量?我需要对4辆车进行检查,我希望能够完成这一点,而无需为一个部分创建8个变量。我也会有3或4个部分来做到这一点。 – mmarceau

+0

谢谢,这是做到了。 – mmarceau

+0

@mmarceau不客气:) – FailedDev

相关问题