Xml 带有多个谓词的xpath没有给出正确的值
我正在解析一些DocBookXML以转换为我们的内部格式 在处理tgroup元素时,如下所示:Xml 带有多个谓词的xpath没有给出正确的值,xml,xslt,xpath,docbook,Xml,Xslt,Xpath,Docbook,我正在解析一些DocBookXML以转换为我们的内部格式 在处理tgroup元素时,如下所示: <tgroup cols="4"> <colspec colwidth="1*" /> <colspec colwidth="1*" /> <colspec colwidth="1*" /> <colspec colwidth="1*" /> 我需要指定我想要的属性
<tgroup cols="4">
<colspec colwidth="1*" />
<colspec colwidth="1*" />
<colspec colwidth="1*" />
<colspec colwidth="1*" />
我需要指定我想要的属性值吗
我总是被xpath表达式绊倒,非常感谢任何人提供的任何帮助
谢谢
Russ我想你应该用这个
。我不确定,但我认为属性值不是字符串值(由的值输出)的一部分。Jirka是正确的。。。属性未被寻址
但为了更易于维护,我会按照以下思路对其进行编码:
<xsl:when test="(@cols = count(colspec)) and (colspec[@colwidth][$number])">
<colspec colnum="{$number}" colname="{$number}"
colwidth="{colspec[@colwidth][$number]/@colwidth}"/>
</colspec>
/
的使用是冗余和混乱的,属性的简单值表达式可以使用属性值模板进行编码。执行
时,当前节点是什么?例如,您希望的XML输出是什么?在本例中,当前节点是tgroup元素。colspec元素的coutput为:对于上面的tgroup元素。这有意义吗?我不明白为什么这是在
中。如果$number
是4
,那么您想要具有@colwidth
的第四个colspec
子级,还是只想要第四个colspec
子级?如果是后者,为什么要用@colwidth
谓词筛选您的孩子?是否所有colspec
元素都将具有@colwidth
?很抱歉,这让人困惑。我同意,属性值模板更具可读性和可维护性。我太专注于xpath,而没有考虑整体解决方案以及如何使其更好。让我也来谈谈,更具可读性和更清晰。这也奏效了!这成功了!我几乎做了这样的事,但我认为这是错误的!谢谢你的帮助!
coldwidth=""
<xsl:when test="(@cols = count(colspec)) and (colspec[@colwidth][$number])">
<colspec colnum="{$number}" colname="{$number}"
colwidth="{colspec[@colwidth][$number]/@colwidth}"/>
</colspec>