簡體   English   中英

如何使用XSLT定位xml文檔中的特定節點?

[英]How do I target a specific node in an xml document using XSLT?

下面是另一個業務部門提供的XML文件的精簡版本。 我需要獲取的值是DriverInputSetGoodStudent

這就是我的方法:

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

這使我成為XML中的第一輛車,因此我將根據GoverningDriverIdInfo / ItemId知道那輛車的駕駛員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>

我看到代碼沒有完全正確地粘貼,代碼塊中沒有出現“結束會話”標簽。 在此先感謝您的幫助。

如果您的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是所需節點的值。 沒有使用變量。 我認為很清楚如何將僅用於證明概念的兩個變量結合起來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM