2011-10-24 5 views
2

以下は、異なるビジネスユニットによって提供されるXMLファイルの要約版です。私が価値を得るために必要なものはです。DriverInputSetGoodStudentです。そう、私はGoverningDriverIdInfo /アイテムIDに基づいて、その車両の運転者のIDを知っているだろう、私はXMLで最初の車を取得しXSLTを使用してxmlドキュメントの特定のノードをターゲットに設定するにはどうすればよいですか?

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

は、これは私がこれに近づいています方法です。次に、その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は目的のノードの値です。変数は使用されません。私は、概念を証明するためだけに使用された2つの変数をどのように組み合わせるかは明らかだと考えました。

+0

変数を使用せずに2つの部分を1つの行に結合する方法はありますか?私は4台の車でこのチェックをする必要があり、私はそれが1つのセクションに8つの変数を作成せずに済むことを望んでいる。私はまたこれを行うために3つまたは4つのセクションを持っています。 – mmarceau

+0

ありがとう、それはそれをしました。 – mmarceau

+0

@mmarceauあなたは大歓迎です:) – FailedDev