我正在尝试使用xalan XPathAPI解析xhtml文件。我坚持以下要求。这是xhtml的片段
<table border="0" cellspacing="0" cellpadding="0" class="cmnt_message">
<tr>
<td width="33" align="right">
<span class="cmnt_baloon"><!-- Image --></span>
</td>
<td width="767" class="red pad_l_10">
Posted by Macha on Mar 06, 2011 at 01:02 PM
</td>
</tr>
<tr>
<td colspan="2" class="cmnt_text">
@rmaytee<br />
<br />
#2<br />
<br />
In 2011 it is possible to switch to old mat/map browser<br />
<br />
Just look around<br />
<br />
<a target="_blank" href=
"http://area.autodesk.com/forum/autodesk-3ds-max/autodesk-3ds-max--3ds-max-design-2011/material-editor/">area.autodesk.com/forum/autodesk-3ds-max/autodesk-3ds-max--3ds-max-design-2011/material-editor/</a><br />
<br />
<br />
<br />
</td>
</tr>
</table>
<table border="0" cellspacing="0" cellpadding="0" class="cmnt_message">
<tr>
<td width="33" align="right">
<span class="cmnt_baloon"><!-- Image --></span>
</td>
<td width="767" class="red pad_l_10">
Posted by rmaytee on Mar 02, 2011 at 06:04 PM
</td>
</tr>
<tr>
<td colspan="2" class="cmnt_text">
2 things:<br />
<br />
1- Please bring back "use object center as start snap point" in the snap settings. We have voiced our opinion about this, now please show us you care. <a target="_blank" href=
"http://www.the-area.com/forum/autodesk-3ds-max/autodesk-3ds-max--3ds-max-design-2011/use-object-center-as-start-snap-point">www.the-area.com/forum/autodesk-3ds-max/autodesk-3ds-max--3ds-max-design-2011/use-object-center-as-start-snap-point</a><br />
<br />
2- Make the Material/Map Browser the way it used to be. It is SO SLOW. At least make an option to switch to a "classic Material/Map Browser" or something.
</td>
</tr>
</table>
我在这里面临几个问题。
/ HTML HTML / HTML://体HTML:DIV [@类= 'content_d'] / HTML:表[@类= 'cmnt_message'] / HTML:TR [1] / HTML:TD [2] /文本()
这让我觉得“Macha发表于2011年3月6日下午01:02”这就是我想要的。但是当我尝试使用以下xpath表达式获取cmnt_text时
/ HTML HTML / HTML://体HTML:DIV [@类= 'content_d'] / HTML:表[@类= 'cmnt_message'] / HTML:TR [2] / HTML:TD /文本( )
我得到的是“@rmaytee”,即直到第一个值。我正在尝试将整个文本放在cmnt_text中。
其他问题是我需要遍历cmnt_message并创建一个Message对象的集合,该对象由发布者和注释组成。 不知道如何使用Xpath进行迭代。
SAX2DOM sax2dom = new SAX2DOM(); p.setContentHandler(sax2dom); p.parse(new InputSource(urlXML.openStream())); Node doc = sax2dom.getDOM(); XObject comment = XPathAPI.eval(doc,commentPath);
但是这只返回第一次出现的cmnt_message类。
任何指针都将受到高度赞赏。
答案 0 :(得分:1)
您必须自己使用XSL或迭代/html:html/html:body//html:div[@class='content_d']/html:table[@class='cmnt_message']/html:tr[2]/html:td
的子节点。
答案 1 :(得分:1)
您想要的是string value。
如果您的XPath引擎支持字符串数据类型,则可以使用:
string(
/html:html
/html:body
//html:div[@class='content_d']
/html:table[@class='cmnt_message']
/html:tr[1]
/html:td[2]
)
或者选择td
元素并使用正确的DOM方法。
将文本节点用于XHTML等混合内容模型并不好。