2009-07-29 62 views
0

我想解析一个格式良好的xhtml文档。
我在节点迭代期间遇到问题。
我XHTML有一个像Java和xpath - xHtml解析问题

<?xml version="1.0" encoding="UTF-8"?> 
<html> 
    <head>...</head> 
    <body> 
    ... 
    <form> 
    ... 
     <div class="AB"> (1 or 2 times) 
     ...      
     <div class="CD"> 
     ... 
      <table>   
      <tbody> 
       <tr> (1 to N times) 
        <td> XXX </td> 
         <td> YYY </td> ... 

我需要的信息都包含在列(TD)的结构。
我想构造N个对象。所以每行(tr)都在其列中包含构建对象所需的信息。
我有1或2格的class =“AB”。所以基本上我将有1个或2个对象包含首先在表

所以从每一行创建的其他对象的列表AB我提取这些AB的NodeList的div

NodeList ABlist= (NodeList) xpath.evaluate("//div[@class='AB']", document, XPathConstants.NODESET) 

现在我正在努力得到第一个div AB的所有tr elems的NodeList。

NodeList trList = (NodeList) xpath.evaluate("/div/table//tr", ABlist.item(0), XPathConstants.NODESET); 

在这种情况下,trList是空的。你知道我的代码有什么问题吗?
谢谢

回答

2

在你的第二个失败的XPath的问题是,你有/启动:

/div/table//tr 

在XPath,就像在文件路径,开始的一条路径与/指的根“启动文件”。但是你实际上并不想那么做 - 你想从节点开始。所以:

div/table//tr 

会做你想做的。

+0

你是对的Pavel!我认为(作为第二个参数)我将'上下文'传递给evaluate()方法。我想我没有/之前在这里发帖尝试过,但也许我在此期间也改变了一些其他的东西,那在当时并不奏效。无论如何它现在工作。非常感谢你的帮助! – mickthompson 2009-07-29 22:27:33

0

您确定这是XHTML版吗?样本文档中没有声明名称空间,没有该名称空间,它不是XHTML。如果有一个命名空间,并且为了简洁起见,你错过了这个例子,那么你的XPath表达式也需要引用这个命名空间,否则它们将不会选择任何东西。

+0

嗨skaffman,我正确retreiving div列表。这只是我尝试提取不工作的trList的方式。 其实你是对的,文档没有指定任何命名空间,所以也许它只能被称为xml。它只符合xml规范而不指定任何名称空间。 – mickthompson 2009-07-29 22:12:36