2011-10-24 166 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

相關問題