如何在XPATH中从html表检索多行节点数据?
在黑暗时代的某个时候,构建了一个脚本,输出以下html如何在XPATH中从html表检索多行节点数据?,xpath,domxpath,Xpath,Domxpath,在黑暗时代的某个时候,构建了一个脚本,输出以下html ... <TABLE BORDER=0 FRAME=ALL_FRAMES RULES=ALL_RULES ALIGN=CENTER BGCOLOR="ffffe5"> <CAPTION ALIGN=TOP> <FONT COLOR=009594 SIZE=-1><B>Access Information</B></FONT> </CAPTION> <
...
<TABLE BORDER=0 FRAME=ALL_FRAMES RULES=ALL_RULES ALIGN=CENTER BGCOLOR="ffffe5">
<CAPTION ALIGN=TOP>
<FONT COLOR=009594 SIZE=-1><B>Access Information</B></FONT>
</CAPTION>
<TR>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
<FONT COLOR=black SIZE=-1><B>Access Circuit(s):</B></FONT>
</TD>
<TD ALIGN=LEFT VALIGN=MIDDLE>
**DATA TO COLLECT 111**
</TD>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
<FONT COLOR=black SIZE=-1><B>Other Circuit(s):</B></FONT>
</TD>
<TD ALIGN=LEFT VALIGN=MIDDLE>
 
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
 
</TD>
<TD ALIGN=LEFT VALIGN=MIDDLE>
**DATA TO COLLECT AAA**
</TD>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
 
</TD>
<TD ALIGN=LEFT VALIGN=MIDDLE>
 
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
 
</TD>
<TD ALIGN=LEFT VALIGN=MIDDLE>
**DATA TO COLLECT BBB**
</TD>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
 
</TD>
<TD ALIGN=LEFT VALIGN=MIDDLE>
 
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
 
</TD>
<TD ALIGN=LEFT VALIGN=MIDDLE>
**DATA TO COLLECT CCC**
</TD>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
 
</TD>
<TD ALIGN=LEFT VALIGN=MIDDLE>
 
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=MIDDLE>
<FONT COLOR=black SIZE=-1><B>Customer:</B></FONT>
</TD>
...
。。。
访问信息
接入电路:
**收集数据111**
其他电路:
 
 
**收集AAA的数据**
 
 
 
**收集BBB的数据**
 
 
 
**收集CCC的数据**
 
 
客户:
...
对不起,我想给你看一下表格的布局,但是如果没有
的话,我不知道怎么做
如何使用XPATH(在PHP中)仅收集每个数据以收集
部分?到目前为止,我已经能够使用/*[*='Access Circuit:']/以下兄弟姐妹::td[1]
检索到第一行
注意事项:
- 这只是一个大文档的一小部分
- 我无法更改脚本输出
- 我不知道会有多少行(图0到图6)
- 数据应始终在同一“列”中
- 我可能只有XPATH版本1。但第二版的答案仍然受到欢迎
- 我想到的表达是:
//TR[(.//B[.='Access Circuit(s):']) or ((./preceding-sibling::TR//B[.='Access Circuit(s):']) and (./following-sibling::TR//B[.='Customer:']))]//TD[2]
返回
<TD ALIGN="LEFT" VALIGN="MIDDLE">**DATA TO COLLECT 111**</TD>
<TD ALIGN="LEFT" VALIGN="MIDDLE">**DATA TO COLLECT AAA**</TD>
<TD ALIGN="LEFT" VALIGN="MIDDLE">**DATA TO COLLECT BBB**</TD>
<TD ALIGN="LEFT" VALIGN="MIDDLE">**DATA TO COLLECT CCC**</TD>
我想到的表达是:
//TR[(.//B[.='Access Circuit(s):']) or ((./preceding-sibling::TR//B[.='Access Circuit(s):']) and (./following-sibling::TR//B[.='Customer:']))]//TD[2]
返回
<TD ALIGN="LEFT" VALIGN="MIDDLE">**DATA TO COLLECT 111**</TD>
<TD ALIGN="LEFT" VALIGN="MIDDLE">**DATA TO COLLECT AAA**</TD>
<TD ALIGN="LEFT" VALIGN="MIDDLE">**DATA TO COLLECT BBB**</TD>
<TD ALIGN="LEFT" VALIGN="MIDDLE">**DATA TO COLLECT CCC**</TD>
哎呀,第一个节点没有正确标记,应该像其他节点一样收集。此外,这是一个非常大的文档的一小部分,除了表数据之外,没有标识标签。我应该说得更清楚些。我已经编辑了我的源代码…这意味着第一个表达式工作得很好,不是吗?…除了它将返回文档中“Access Circuit”部分前后的许多其他不需要的第二个
td
子节点。这个逻辑看起来与我的工作完全一样。但是,(.//B[.=“访问电路:”)
返回整个文档的第二个td
子级,而(/前面的同级::TR//B[.=“访问电路:”])和(/后面的同级::TR//B[.=“客户:”)
不返回任何内容。我只是对XPATH不够精通,不知道如何调整它。我花了一天的大部分时间才发现我使用的数据与我预期的数据不同。(facepalm)一旦我把两个对齐,它就工作得很好。最后,我使用了//tr[(./td/font/b[.=“访问电路:”])或(./previous sibling::tr/td/font/b[.=“访问电路:”])和(./following sibling::tr/td/font/b[.=“Customer:”)]/td[2]
。此外,我发现可以在Chrome的控制台中使用$x('query')进行测试,这种情况很重要+1来引导我完成并付出额外的努力。哎呀,第一个节点没有正确标记,应该像其他节点一样收集。此外,这是一个非常大的文档的一小部分,除了表数据之外,没有标识标签。我应该说得更清楚些。我已经编辑了我的源代码…这意味着第一个表达式工作得很好,不是吗?…除了它将返回文档中“Access Circuit”部分前后的许多其他不需要的第二个td
子节点。这个逻辑看起来与我的工作完全一样。但是,(.//B[.=“访问电路:”)
返回整个文档的第二个td
子级,而(/前面的同级::TR//B[.=“访问电路:”])和(/后面的同级::TR//B[.=“客户:”)
不返回任何内容。我只是对XPATH不够精通,不知道如何调整它。我花了一天的大部分时间才发现我使用的数据与我预期的数据不同。(facepalm)一旦我把两个对齐,它就工作得很好。最后,我使用了//tr[(./td/font/b[.=“访问电路:”])或(./previous sibling::tr/td/font/b[.=“访问电路:”])和(./following sibling::tr/td/font/b[.=“Customer:”)]/td[2]
。此外,我发现可以在Chrome的控制台中使用$x('query')进行测试,这种情况很重要+谢谢你陪我走过并付出额外的努力。