如何为包含linebreak或html fomatters的文本的节点查找Xpath

时间:2017-04-23 23:55:50

标签: html xpath

我正在尝试从html响应中找到特定节点内容。我试图找到一个非常特定的节点有点困难,因为节点元素包含换行符。我在xpathtester网站上试用,我的测试xml是在下面提供的。

    <html> 
      <table > 
        <tr > 
          <th colspan="3"> 
            <table  > 
              <tr  valign="bottom"> 
                <th   scope="col" align="left">Test
                  <br/> Item1</th>  
                <th   scope="col">:</th>  
                <th   scope="col" align="left">ABC123</th>  
                <th rowspan="7"> 
                  <img width="100" height="140" src="xyzcontenturl.jpg"/> 
                </th> 
              </tr>   
              <tr  valign="bottom"> 
                <th   scope="col" align="left">Test
                  <br/> Item2</th>  
                <th  scope="col" >:</th>  
                <th  scope="col" align="left" colspan="2" >DEF789</th> 
              </tr> 
            </table> 
          </th> 
        </tr>  
    </table>  
      <p> 
        <strong/> 
      </p> 
    </html>

我的想法是拿起第三列标题文本,我可以放置一个条件// th [contains(text(),“Test”)] / following-sibling :: th [2] / text()找到(返回的值是ABC123)。

挑战是当我尝试根据特定节点定位值时,即。 “测试项目1”。 由于换行符位于文本“Test”和“Item1”之间,我无法使用“包含或启动”功能。

如何编写XPATH,以便我可以选择值为“Test&lt; br /&gt; Item1”的TH元素?

注意:提供的xml是一个说明问题的示例,因此第一个表头(th元素)或第二个表头(th)元素等将无济于事。

2 个答案:

答案 0 :(得分:0)

如果您在代码中使用XPath,那么获取元素并使用“InnerText”属性。 如果从XSL使用text()函数。 你叫什么叫XPath?

答案 1 :(得分:0)

与使用单个空格替换换行符(不是HTML <br/>以清除)的normalize-space()进行比较:

//th[normalize-space()='Test Item1']/following-sibling::th[2]/text()

<强> demo

该函数接收th中所有文本节点的连接作为参数,对参数执行空格式化并返回结果。引自链接规范:

  

normalize-space函数返回带有空格的参数字符串,该空格通过去除前导和尾随空格并用空格替换空格字符序列来规范化。