想要使用 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)]
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)]