xml – XPath当两个属性名称相同时,从当前节点值中选择节点
任何人都可以帮我解决这个小问题.
XML <MPN> <MTR MSN="AB123456"/> <MTR MSN="AB654321"/> <MTR MSN="AB654322"/> <MTR MSN="AB654323”/> <MTR MSN="AB654324"/> <JOB JobId="136"> <JMR MSN="AB123456"> <JRA DateActionRequiredBy="20090701120012" /> </JMR> <JMR MSN="AB654321"> <JRA DateActionRequiredBy="20090701100010" /> </JMR> </JOB> </MPN> 我想从JRA元素中检索DateActionRequiredBy,当解析器位于MTR元素时,只应返回一个. 我试过了. ../JOB/JMR[@MSN = @MSN]/JRA/@DateActionRequiredBy 返回{Dimension:[2]} NodeSet,由于@MSN属性有效地匹配自身而不是父级,因此匹配所有内容. ../JOB/JMR[@MSN = ./@MSN]/JRA/@DateActionRequiredBy 返回{Dimension:[2]} NodeSet 我找到了一个解决方案,但它需要在每个xsl:属性中都有一个变量,这对我来说似乎不对. <xsl:variable name="storeMSN" select="@MSN"/> ../JOB/JMR[@MSN = $storeMSN]/JRA/@DateActionRequiredBy 返回 这就是我所追求的,但除了每个属性的变量之外,必须有一种更简单的方法来实现这一点. 提前致谢. 解决方法<MPN> <MTR MSN="AB123456"/> <MTR MSN="AB654321"/><!-- current node (i.e. context node) --> <MTR MSN="AB654322"/> <MTR MSN="AB654323”/> <MTR MSN="AB654324"/> <JOB JobId="136"> <JMR MSN="AB123456"> <JRA DateActionRequiredBy="20090701120012" /> </JMR> <JMR MSN="AB654321"> <JRA DateActionRequiredBy="20090701100010" /><!-- desired node --> </JMR> </JOB> </MPN> 那么你需要使用这个XPath: ../JOB/JMR[@MSN = current()/@MSN]/JRA/@DateActionRequiredBy 请注意,这仅适用于XSLT,因为current()是一个XSLT函数. 您可以通过添加XSL密钥来简化该过程: <xsl:key name="kJMR" match="JMR" use="@MSN" /> 在XPath中: key('kJMR',@MSN)/JRA/@DateActionRequiredBy 解释为什么尝试不能按预期工作.都 > ../JOB/JMR[@MSN = @MSN] / JRA / @ DateActionRequiredBy 比较@MSN与自身 – 一个永远不会失败的操作.这样,您始终可以获得所有可能的节点. 在谓词中,XPath上下文始终是您应用谓词的节点. current()函数用于为您提供XSLT上下文. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |