Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XPATH查询:如何获取两个元素?_Xpath - Fatal编程技术网

XPATH查询:如何获取两个元素?

XPATH查询:如何获取两个元素?,xpath,Xpath,我的HTML代码是: <table> <tr> <td class="data1"><p>1</td></td> <td class="data1"><p>2</td></td> <td class="data1"><p>3</td></td> <td class="data1"><p>4</td&g

我的HTML代码是:

<table>
<tr>
<td class="data1"><p>1</td></td>
<td class="data1"><p>2</td></td>
<td class="data1"><p>3</td></td>
<td class="data1"><p>4</td></td>
</tr>
<tr>
<td class="data1"><p>5</td></td>
<td class="data1"><p>6</td></td>
<td class="data1"><p>7</td></td>
<td class="data1"><p>8</td></td>
</tr>
</table>
结果是:

<p>4</p>
<p>8</p>
4

八,

结果是正确的!但是,如果我想举个例子:

<p>3</p> <p>4</p>

<p>7</p> <p>8</p>
3

4

7

8

所以

[3]/p[4]/p

如何分别获取这两个元素


非常感谢你

我认为您可能在寻找与

[position() > 2]

它检索前两个元素之后的所有元素。

首先请注意,提供的XML格式不正确

我假设预期的格式良好的XML大致如下所示:

<table>
    <tr>
        <td class="data1"><p>1</p></td>
        <td class="data1"><p>2</p></td>
        <td class="data1"><p>3</p></td>
        <td class="data1"><p>4</p></td>
    </tr>
    <tr>
        <td class="data1"><p>5</p></td>
        <td class="data1"><p>6</p></td>
        <td class="data1"><p>7</p></td>
        <td class="data1"><p>8</p></td>
    </tr>
</table>

类似于[position()]的东西可能是有用的好问题(+1)。请参阅我的答案,其中更正了您的XML,并讨论了两个正确的解决方案,以及为什么第三个建议的XPath表达式是错误的。太好了!非常感谢。我能用一下吗?[position()=1][position()=4]如果我只想得到第一个和第四个元素?@Damiano-如果你分别计算这两个谓词过滤器,你会得到你想要的信息。如果要在单个XPATH表达式中计算它们,则需要将它们组合在单个谓词筛选器中,并使用
运算符:
[position()=1或position()=4]
否则,它将计算以查看两个谓词筛选器是否都为真(并且没有任何元素同时是第一个和第四个)。
<table>
    <tr>
        <td class="data1"><p>1</p></td>
        <td class="data1"><p>2</p></td>
        <td class="data1"><p>3</p></td>
        <td class="data1"><p>4</p></td>
    </tr>
    <tr>
        <td class="data1"><p>5</p></td>
        <td class="data1"><p>6</p></td>
        <td class="data1"><p>7</p></td>
        <td class="data1"><p>8</p></td>
    </tr>
</table>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:copy-of select=" /*/*/td[position() = 3 or position() = 4]/p"/>

  ----------------------

  <xsl:copy-of select="   /*/*/td[3]/p  | /*/*/td[4]/p"/>

  ----------------------

  <xsl:copy-of select=" /*/*/td[3][4]/p"/>

 </xsl:template>
</xsl:stylesheet>