想要使用 XPath 来确保 XHTML 元素具有具有特定名称的父元素

Want to use XPath to ensure that an XHTML element has a parent a with specific name

XPath

我有一个 XHTML 文档,我想在其中使用 XPath 来确保 class 属性设置为 block 的任何元素都将 p 作为父元素。

我正在使用的 XPath 语句不会捕获下面 XHTML 中的违规元素,除非我将 <p>Lorem ipsum dolor</p> 的元素名称更改为例如<b>Lorem ipsum dolor</b>,或更改 XPath 语句,将 [not(p)] 替换为例如[not(u)]。不知何故,存在与父元素具有相同元素名称的同级元素 (p) 的事实阻止了它的工作。

对我应该做什么有什么想法吗?

(我一直在使用 http://xpather.com/ 来验证我的 XPath)。

XPath

.//*[contains(concat(" ",normalize-space(@class)," ")," block ")]/parent::*[not(p)]

XHTML

<?xml version="1.0" encoding="utf-8"?>
<html>
    <head>
        <style>
        </style>
        <script>
        </script>
        <meta name="description"/>
    </head>
    <body>
        <h1>Title</h1>
        <div>
          <kbd class="block"></kbd>
          <p>Lorem ipsum dolor</p>
        </div>
    </body>
</html>

试试这个 XPath-1.0 表达式:

//*[normalize-space(@class) = "block" and not(parent::p)]