【问题标题】:Get NodeList from parent who contains text从包含文本的父节点获取 NodeList
【发布时间】:2014-07-11 05:55:23
【问题描述】:

我想从一个父节点中获取所有子节点,该父节点在其中一个节点中包含特定文本。换句话说:我在某个子节点上开始搜索,我确定该子节点包含我需要的一些字符串。找到它后,我不需要从与相同 Xpath 表达式匹配的节点中获取所有其他字符串,而是需要在同一级别上获取其他节点。我正在使用 Java。 例如:

     <table width="575" border="0" cellspacing="1" cellpadding="0">
                <tr> 
                  <td width="39" class="back1"><b class="texto4">CRN</b></td>
                  <td width="60" class="back1"><b class="texto4">Materia</b></td>
                  <td width="53" class="back1"><b class="texto4">Secci&oacute;n</b></td>
                  <td width="55" class="back1"><b class="texto4">Cr&eacute;ditos</b></td>
                  <td width="156" class="back1"><b class="texto4">T&iacute;tulo</b></td>
                  <td width="69" class="back1"><b class="texto4">Cupo</b></td>
                  <td width="57" class="back1"><b class="texto4">Inscritos</b></td>
                  <td width="77" class="back1"><b class="texto4">Disponible</b></td>
                </tr>
                <tr> 
                  <td width="39"><font class="texto4"> 
                    10110                        </font></td>
                  <td width="60"><font class="texto4"> 
                    IIND1000                        </font></td>
                  <td width="53"><font class="texto4"> 
                  <div align="center">
                    1                        </div></font></td>
                  <td width="55"><font class="texto4"> 
                    <div align="center">
                    3                       </div>
                    </font></td>
                  <td width="156"><font class="texto4"> 
                    INTROD. INGEN. INDUSTRIAL                        </font></td>
                  <td width="69"><font class="texto4"> 
                    100                        </font></td>
                  <td width="57"><font class="texto4"> 
                    100                        </font></td>
                  <td width="77"><font class="texto4"> 
                    0                        </font></td>
                </tr>
              </table>

如果我查找 IIND1000,我想获取该 tr 标签中的每个 td 元素(10110,IIND1000, 1, 3, INTROD.INGEN. INDUSTRIAL, 100, 100, 0)。 这可能与 Jtidy 吗?有什么提示或建议吗?谢谢。

【问题讨论】:

  • 你能添加你尝试过的代码和一个示例xml吗?
  • 对不起。我刚刚用获得的 HTML 文档的示例更新了问题。到目前为止,我已经尝试了这段代码:XPath xpath = XPathFactory.newInstance().newXPath(); XPathExpression expr = xpath.compile("//td[@width='39']/font/text()"); NodeList crn = (NodeList)expr.evaluate(doc, XPathConstants.NODESET); 这将获取该表中宽度为 39 的每个节点的文本。我需要的是让所有节点处于找到文本的同一级别(其中文本等于用户输入的内容)。
  • 请同时将您的代码尝试添加到您的问题中,不要将它们作为评论。

标签: java xml xpath jtidy


【解决方案1】:

你可能想要这个:

XPathExpression expr = 
     xpath.compile("//tr[td[normalize-space(font) = 'IIND1000']]/td/font/text()"); 

括号中的条件检查是否存在具有所需条件的孙节点,并且只会输出匹配的&lt;tr&gt; 的所有孙节点。

【讨论】:

  • 我会尽快试试这个。谢谢!编辑:工作。对此,我真的非常感激。它输出这些项目:[10110, IIND1000, INTROD.英根。工业, 100, 100, 0, 16886, IIND1000, INTROD.英根。工业, 100, 100, 0]。我只需要以某种方式将结果分成 6 个块,这样我就可以使用相同的代码分隔类。
  • 你会不会碰巧知道为什么该表达式无法从字体后有 div 的元素中获取文本?第三和第四要素。我为此发布了一个不同的问题,但也许你知道stackoverflow.com/questions/24668436/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多