[英]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.