2012-09-23 71 views
0

我需要帮助解决我的问题,或者至少有一些建议。我使用XPATH使用HTMLcleaner解析HTML文档。在特定节点元素下获取节点

我有这样的事情:

<html> 

[code and other <h4> tags] 

<h4>Random name</h4> 
<a href="link" target="target"> Text I want to get </a> 
<a href="link2" target="target2"> Text I want to get 2 </a> 
<a href="link3" target="target3"> Text I want to get 3 </a> 
<a href="link4" target="target4"> Text I want to get 4 </a> 
<h4> Random name 2 </h4> 
<a href="link" target="target"> Text I don't want to get </a> 


[code and other <h4> tags] 
</html> 

确定。我有几个<h4>标签,每个标签都带有<a>标签和一些文字。我的问题是我不知道如何从一个特定的文件中获得所有相应的文本,就像“h4 [i]”一样。我尝试过这样但它没有工作:

String xpath = "h4["+number+"]//a" //where number will increment 

谢谢你的建议,为您提供帮助!

+0

可能重复http://stackoverflow.com/questions/7957480/xpath-select-elements-between-two-nodes) –

回答

1

使用

/*/h4[1]/following-sibling::a[not(preceding-sibling::h4[2])]/text() 

XSLT - 基于验证

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    <xsl:copy-of select= 
    "/*/h4[1]/following-sibling::a[not(preceding-sibling::h4[2])]/text()"/> 
</xsl:template> 
</xsl:stylesheet> 

当在下面的XML文档(所提供的片段,包装在单个应用该变换成为一个格式良好的XML文档的顶层元素):

<html> 
    <h4>Random name</h4> 
    <a href="link" target="target"> Text I want to get </a> 
    <a href="link2" target="target2"> Text I want to get 2 </a> 
    <a href="link3" target="target3"> Text I want to get 3 </a> 
    <a href="link4" target="target4"> Text I want to get 4 </a> 
    <h4> Random name 2 </h4> 
    <a href="link" target="target"> Text I don't want to get </a> 
</html> 

中的XPath表达式,并将所有选定的(文本)节点被复制到输出:

Text I want to get Text I want to get 2 Text I want to get 3 Text I want to get 4 
[在两个节点之间的xpath选择元件(的
+0

在我的文档中,这不是第一个h4,这就是为什么我不能这样做。我将不得不通过所有

标签并获取他们的内容,但不是一次全部,这是我的问题。我会尝试使用像h4 [i]的东西,在那里我会增加。 – AnTz

+0

@AnTz,然后你必须编辑问题并提供一个真正具有代表性的XML文档。永远不要让读者猜测。在我的解决方案中,用'N'替换'1'和用'N + 1'替换'2',其中'N'是父节点子节点中'h4'出现的序数。 –

+0

是的,的确是一个错误,我无法提供XML文件。除此之外,我试图得到“/ h4 [4]”(这就是我所要查询的),它没有提供任何东西。另外,尝试“/ h4 [4] // a”也不行。我究竟做错了什么? – AnTz