XSL获取父节点元素值问题:各section输出相同ShortName
我猜你现在头疼的点在于:遍历section节点时,不管哪个section,输出的ShortName全是同一个值,没法正确拿到对应父节点的内容对吧?
要搞定这个问题,核心是要让XSL在处理每个section时,精准定位到它对应的父节点,而不是一直引用同一个全局节点。这里给你几个实用的排查和解决方向:
检查节点路径是否正确:如果
ShortName是某个父容器(比如chapter或document)的子节点,在section的处理模板里,一定要用相对路径来获取父节点的值。比如:- 如果父节点是
section的直接上级,用../ShortName就能拿到; - 如果父节点是更上层的祖先节点,就用
ancestor::[父节点名称]/ShortName来精准定位。
举个简单的例子,假设你的XML结构是这样:
<chapter> <ShortName>第一章</ShortName> <section>第一节内容</section> <section>第二节内容</section> </chapter>那在
section的模板里,写../ShortName就能正确拿到当前section所属章节的ShortName,而不是用绝对路径/chapter/ShortName(这种写法会一直取第一个chapter的ShortName)。- 如果父节点是
确认模板的上下文环境:如果你用
apply-templates处理section,要确保模板的上下文是每个独立的section节点,别不小心让上下文停留在父节点上——比如循环section时写错了节点选择器,导致每次都从父节点的上下文去拿ShortName,自然会重复。避免全局变量的误用:如果你之前定义了全局变量来存储ShortName,这个变量只会在初始化时取一次值,后续所有section都会复用这个固定值。这种情况要么把变量移到section模板内部定义,要么直接用相对路径动态获取。
因为你没提供完整的XML和XSL代码,暂时只能给你这些通用思路。要是能补充具体的结构片段和你当前的代码,我可以帮你写出更精准的解决方案。
内容的提问来源于stack exchange,提问作者user3894628

