Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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_Xpath_Counting - Fatal编程技术网

Xml XPATH:计算祖先节点中前面的元素

Xml XPATH:计算祖先节点中前面的元素,xml,xpath,counting,Xml,Xpath,Counting,我在使用XPATH时遇到问题,需要一些指导。我使用了w3schools教程,但它还不够先进,无法帮助我找出我做错了什么。(我预计将来需要更多地使用XPATH——因此,推荐优秀的教程或书籍也将不胜感激) 我正在写一本有可选标题的书。如果使用了listTitle,我想将一个列表编号预先挂起到将章节和列表编号(基于listTitle)连接在一起的标题上。不包含listTitle的列表不应增加列表计数器 下面是一个示例xml文件,其中显示了所需的结果: <chapter><title&

我在使用XPATH时遇到问题,需要一些指导。我使用了w3schools教程,但它还不够先进,无法帮助我找出我做错了什么。(我预计将来需要更多地使用XPATH——因此,推荐优秀的教程或书籍也将不胜感激)

我正在写一本有可选标题的书。如果使用了listTitle,我想将一个列表编号预先挂起到将章节和列表编号(基于listTitle)连接在一起的标题上。不包含listTitle的列表不应增加列表计数器

下面是一个示例xml文件,其中显示了所需的结果:

<chapter><title>Chapter 1></title>
    <para>Para text.</para>
    <ul><listTitle>List 1-1</listTitle> .... </ul>

    <section><title>Section 1.1</title>
    <ol> .... </ol>
    <ol><listTitle>List 1-2</listTitle> ... </ol>
    </section>

    <ol><listTitle>List 1-3</listTitle> ... </ol>
    <ul><listTitle>List 1-4</listTitle> ... </ul>
</chapter>

<chapter><title>Chapter 2></title>
    <para>Para text.</para>
    <ul><listTitle>List 2-1</listTitle> .... </ul>

    <section><title>Section 2.1</title>
    <ol> .... </ol>
    <ol><listTitle>List 2-2</listTitle> ... </ol>
    </section>

    <ol><listTitle>List 2-3</listTitle> ... </ol>
    <ul><listTitle>List 2-4</listTitle> ... </ul>
</chapter>

这个问题至少部分是由xmlns问题引起的

这篇文章有助于:

以下代码提供了正确的列表标题计数:

('concat("List ", count(preceding::chapter)+1,"-", for $i in
count(preceding::chapter) return ((count(//parent::basicDocument//
chapter[$i+1]//*[name() = "listTitle"] intersect preceding::* ) ) + 1 )," " )'

您使用什么来处理xpath?您是否将xpath用作XSLT的一部分?(如果是这样的话,会很有帮助。)嗨,丹尼尔-谢谢你的洞察力。不幸的是,我不得不在css文件中的一个函数中为我的部署进行计数。。。它非常具体,并且是XML作者专有的。
('concat("List ", count(preceding::chapter)+1,"-", for $i in
count(preceding::chapter) return ((count(//parent::basicDocument//
chapter[$i+1]//*[name() = "listTitle"] intersect preceding::* ) ) + 1 )," " )'