Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 带有多个谓词的xpath没有给出正确的值_Xml_Xslt_Xpath_Docbook - Fatal编程技术网

Xml 带有多个谓词的xpath没有给出正确的值

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*" /> 我需要指定我想要的属性

我正在解析一些DocBookXML以转换为我们的内部格式

在处理tgroup元素时,如下所示:

      <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>