使用XPATH在两个处理指令之间选择节点

时间:2015-02-06 08:46:10

标签: xpath

我有这样的事情:

<?cond_start condition="Online" ?>
<p>This section is tagged with Conditional "Online".</p>
<?cond_end?>

<?cond_start condition="Print" ?>
<p>This section is tagged with Conditional "Print".</p>
<?cond_end?>

我需要根据PI的值处理PI之间的内容(条件=&#34; Online&#34; / condition =&#34; Print&#34;)。 我可以选择一个特定的PI,例如这样:

//processing-instruction('cond_start')

但我不知道如何超越这个...特别是不会,因为可以有这样的嵌套PI:

<?cond_start condition="Online" ?>
<p>This section is <?cond_start condition="Comment" ?>Are you sure?<?cond_end?> tagged with Conditional "Online".</p>
<?cond_end?>

Aynone的任何想法?

1 个答案:

答案 0 :(得分:1)

我认为你想要所有节点

  • 第一个前面的处理指令节点本身是一个cond_start,它有一定的内容,例如'condition="Online"'
  • 第一个后续处理指令节点本身是cond_end

那将是:

//node()[
    preceding-sibling::processing-instruction()[1][
        self::processing-instruction('cond_start')
        and contains(., 'condition="Online"')
    ]
    and following-sibling::processing-instruction()[1][
        self::processing-instruction('cond_end')
    ]
]

请注意,当<?cond_start condition="..." ?><?cond_end?>之间有更多处理说明时,这不起作用。如果你遇到这种情况就会变得更加复杂。