- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个 XPath 表达式,将所有兄弟节点返回到一个,满足特定条件。在我的具体情况下,我有一个 (X)HTML 列表,其中包含一些列表项,其中一些具有特定的类,而其他元素则没有类。
可视化:我正站在确实具有“foo”类的列表项之一(例如包含文本“D”的 li,我想获取包含“E”、“F”和“G”的后续 li 的列表,但后续项目均不包含“H”、“I”和“J”。
...
<li class="foo">A</li>
<li>B</li>
<li>C</li>
<li class="foo">D</li>
<li>E</li>
<li>F</li>
<li>G</li>
<li class="foo">H</li>
<li>I</li>
<li>J</li>
...
我正站在确实有类“foo”的列表项之一(例如包含文本“D”的li,我想获取包含“E”、“F”和的后续li的列表“G”,但后续项目均不包含“H”、“I”和“J”。
我正在使用 Java v1.8 及其内置 javax.xml.xpath 包访问先前解析的 org.w3c.dom.Document。
注意:我在 google 上广泛搜索了一个解决方案,我知道有很多看起来非常相似的示例,甚至在 StackOverflow 上也是如此,但这些都不适合我!无论我尝试并适应手头的情况,总是只给我第一个元素(在本例中为“E”)或根本不给我。 :-(
稍后添加:
由于我显然表达得如此糟糕,所以我附加了一个测试程序:
package pull_lis;
import java.io.FileInputStream;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.tidy.Tidy;
public class TestXPathExpression
{
public static void main(String[] args) throws Exception {
Tidy tidy = new Tidy();
XPathFactory xpathfactory = XPathFactory.newInstance();
XPath xpath = xpathfactory.newXPath();
Document doc = tidy.parseDOM(new FileInputStream("sample.xml"), System.out);
XPathExpression expr1 = xpath.compile("//li[@class='foo']");
// XPathExpression expr2 = xpath.compile("//li[@class='foo'][2]/following-sibling::li[@class='foo'][1]/preceding-sibling::li[preceding-sibling::li[@class='foo'][2]]");
XPathExpression expr2 = xpath.compile("???"); // <<<< IT IS THIS EXPRESSION THAT I AM SEEKING
NodeList foos = (NodeList)expr1.evaluate(doc, XPathConstants.NODESET);
System.out.println(foos.getLength() + " foos found.");
for (int idx1 = 0; idx1 < foos.getLength(); idx1++) {
Node foo = foos.item(idx1);
System.out.println("foo[" + idx1 + "]: " + foo.getChildNodes().item(0).getNodeValue());
NodeList nodes = (NodeList)expr2.evaluate(foo, XPathConstants.NODESET);
for (int idx2 = 0; idx2 < nodes.getLength(); idx2++) {
Node node = nodes.item(idx2);
System.out.println(non-foo[" + idx2 + "]: " + node.getChildNodes().item(0).getNodeValue());
}
}
}
}
sample.xml 包含:
<html>
<head>
<title>Example</title>
</head>
<body>
<ul>
<li class="foo">A</li>
<li>B</li>
<li>C</li>
<li class="foo">D</li>
<li>E</li>
<li>F</li>
<li>G</li>
<li class="foo">H</li>
<li>I</li>
<li>J</li>
</ul>
</body>
</html>
如果我使用 kjhughes 提供的表达式让上述程序在 example.xml 上运行,我会得到:
3 foos found.
foo[0]: A
non-foo[0]: E
non-foo[1]: F
non-foo[2]: G
foo[1]: D
non-foo[0]: E
non-foo[1]: F
non-foo[2]: G
foo[2]: H
non-foo[0]: E
non-foo[1]: F
non-foo[2]: G
但我想要/需要的是:
3 foos found.
foo[0]: A
non-foo[0]: B
non-foo[1]: C
foo[1]: D
non-foo[0]: E
non-foo[1]: F
non-foo[2]: G
foo[2]: H
non-foo[0]: I
non-foo[1]: J
希望这次我能说得更清楚一点......
M.
最佳答案
鉴于此 XHTML:
<ul>
<li class="foo">A</li>
<li>B</li>
<li>C</li>
<li class="foo">D</li>
<li>E</li>
<li>F</li>
<li>G</li>
<li class="foo">H</li>
<li>I</li>
<li>J</li>
</ul>
此 XPath:
//li[. = 'D']/following-sibling::li[@class='foo'][1]/preceding-sibling::li[preceding-sibling::li[. = 'D']]
将返回那些 li
启动后<li>D</li>
但在下一个li
之前与 class='foo'
:
<li>E</li>
<li>F</li>
<li>G</li>
<小时/>
OP 在评论中指出,第一个感兴趣的节点不应由其“D”内容来标记,而应由第二个 li
来标记。与 @class="foo"
.
以下是根据此新标准启动的上述 XPath:
//li[@class='foo'][2]/following-sibling::li[@class='foo'][1]/preceding-sibling::li[preceding-sibling::li[@class='foo'][2]]
它选择“E”、“F”和“G”li
根据要求的元素。
关于java - XPath:如何选择满足某些条件的所有兄弟节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28709046/
我的目标是运行类似 bro --iface 的命令并只获取 conn.log,但我无法从 Bro 文档或联机帮助页中得知如何执行此操作。 谢谢。 最佳答案 这让你继续: bro -i -b b
我正在使用以下 jQuery 来更改无序列表中元素的类。这似乎不是实现该效果的最有效方法。有更好的写法吗? $(function() { $('nav li a').click( functi
我有一个看起来像这样的导航栏 Services Work Contact 当我 :hover 一项时,我想更改其他两项的样式。我可以使用什么 CSS 选择器? 最佳答案 您
我正在寻找一种方法来选择包含特定图像的列的行内具有特定名称属性的所有输入。 下面的代码是一个说明性示例:
假设我有以下 HTML: 我想在鼠标悬停在元素上时对图标应用一些规则,可以用以下 CSS 描述: .navigation__item__icon { color: black; } .n
我的 div text-button 没有与我在其兄弟 div 下想要的正确边距对齐。我将 position: absolute; 设置到位,因为每次我将其设置为相对位置时,jQuery 动画都不起作
这个问题在这里已经有了答案: CSS margin terror; Margin adds space outside parent element [duplicate] (7 个答案) 关闭
如果我有 3 个 NSManagedObjectContext。 一个。是根上下文。 B.是一个后台保存上下文,解析一个JSON后生成NSManagedObjects C.是在 NSFetchedRe
我在容器中有三个 div:http://jsfiddle.net/fBe9y/ 一个div内容很多。如何让内容较少的其他两个 div 与最长的 div 的高度匹配? 我尝试将 height: 100%
我正在尝试通过单击另一个元素对一个元素执行一个简单的 toggleClass。有多个元素具有相同的类,我只想切换同级/最近的元素。我相信我从根本上理解了针对 parent / child / sibl
我正在使用 AngularJS 开发一个小应用程序。我的项目包含一个包含 3 个 View 的 Body.html 文件:SideMenu、Header 和 Content,每个 View 都有自己的
在 CSS 方面,我不认为我是个笨蛋,但这个就是我。我的想法是我需要一个父元素,两侧有两个 float 子元素。我希望 parent 的高度与 child 的高度一样高,并让 child 的高度变得相
我有两个 span(s) 在父级 div 中彼此相邻。 我希望第二个 span 显示在最左边,然后是第一个 span。 (注意:由于某些原因,我不能简单地移动第二个跨度来代
今天跟大家分享下selenium中根据父子、兄弟、相邻节点定位的方法,很多人在实际应用中会遇到想定位的节点无法直接定位,需要通过附近节点来相对定位的问题,但从父节点定位子节点容易,从子节点定位父节点
这是 HTML 的结构:
我在一个包装器中并排放置了两个 div。其中一个 div 的内容比另一个多,我希望第二个 div 填充包装的垂直空间。 .wrapper { height: 50%; width: 50%;
我的网站顶部有一个带有此 CSS 的菜单: .menu { width: 100%; display: block; float: left; } 在里面,我有几个 div: .menu .menu-
我有两个 div 元素,第一个 div 中有一个按钮,如下所示。 Click 下面是我的 JavaScript 代码。 function nextDiv(el
两个同级 div(#one 和 #two),每个都包含一些文本。 我移动#two margin-top 为负,预计它会覆盖 #one , 但当文本位于 #one 前面时,背景位于下方。 只有在 #on
我有一个容器 div,它有一个 float 的左侧导航 Pane 和一个右侧的内容 Pane : CSS: body { text-align: cent
我是一名优秀的程序员,十分优秀!