gpt4 book ai didi

haskell - xml-conduit:如何仅获取第一个 tbody 和该 tbody 的直接子 tr?

转载 作者:行者123 更新时间:2023-12-02 14:38:26 24 4
gpt4 key购买 nike

我正在使用 xml-conduit 和 Text.XML.Cursor 来导航一些带有嵌套表的糟糕 html。有一个带有两个 tbody 标签的表,我想要第一个 tbody 的直接子 tr 标签。这是到目前为止我的代码:

getIdentityTableBody :: Cursor -> [Cursor]
getIdentityTableBody
= element "table" >=> hasAttribute "summary" >=>
attributeIs "summary" "Issuer Identity Information"
&// element "tbody" >=> child >=> element "tr"

但这会获取两个 tbody 标记的所有后代 tr。我根本不知道如何单独获取第一个 tbody,并且对仅过滤该 tbody 中的直接子级感到困惑。

这是我正在尝试解析的 html。

<table summary="Issuer Identity Information" width="100%">
<tbody>
<tr>
<th width="33%" class="FormText">CIK (Filer ID Number)</th>
<th width="10%" class="FormText">Previous Names</th>
<td width="23%">
<table border="0" summary="Table with single CheckBox">
<tbody><tr>
<td class="CheckBox"><span class="FormData">X</span></td>
<td align="left" class="FormText">None</td>
</tr>
</tbody></table>
</td>
<th width="33%" class="FormText">Entity Type</th>
</tr>
<tr>
<td>
<a href="http://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001614286">0001614286</a>
</td>
<td rowspan="5" colspan="2" valign="top"></td>
<td rowspan="7" valign="top">
<table width="100%" border="0" summary="Table with Multiple boxes">
<tbody><tr>
<td class="CheckBox">&nbsp;&nbsp;</td>
<td class="FormText">Corporation</td>
</tr>
<tr>
<td class="CheckBox"><span class="FormData">X</span></td>
<td class="FormText">Limited Partnership</td>
</tr>
<tr>
<td class="CheckBox">&nbsp;&nbsp;</td>
<td class="FormText">Limited Liability Company</td>
</tr>
<tr>
<td class="CheckBox">&nbsp;&nbsp;</td>
<td class="FormText">General Partnership</td>
</tr>
<tr>
<td class="CheckBox">&nbsp;&nbsp;</td>
<td class="FormText">Business Trust</td>
</tr>
<tr>
<td class="CheckBox">&nbsp;&nbsp;</td>
<td class="FormText">Other (Specify)</td>
</tr>
</tbody></table>
<br>
</td>
</tr>
<tr>
<th class="FormText">Name of Issuer</th>
</tr>
<tr>
<td class="FormData">SRA US Equity Fund, LP</td>
</tr>
<tr>
<th class="FormText">Jurisdiction of Incorporation/Organization</th>
</tr>
<tr>
<td class="FormData">DELAWARE</td>
</tr>
<tr>
<th class="FormText" colspan="2">Year of Incorporation/Organization</th>
</tr>
<tr>
<td colspan="3">
<table border="0" summary="Year of Incorporation/Organization">
<tbody>
<tr>
<td class="CheckBox">&nbsp;&nbsp;</td>
<td class="FormText">Over Five Years Ago</td>
</tr>
<tr>
<td class="CheckBox"><span class="FormData">X</span></td>
<td class="FormText">Within Last Five Years (Specify Year)</td>
<td><span class="FormData">2014</span></td>
</tr>
<tr>
<td class="CheckBox">&nbsp;&nbsp;</td>
<td class="FormText">Yet to Be Formed</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>

最佳答案

问题是 &//元素“tbody” 表示“查找每个 tbody 后代”,包括其他 tbody 标记内的 tbody 标记。不如使用 &/ 来代替,它只获取 table 元素的直接 tbody 后代?

另外两条评论:

  1. 如果您可以提供一些示例 XML/HTML,那将会很有帮助。
  2. 您不需要同时使用 hasAttributeattributeIs。只需确认该属性具有给定值也会检查它是否存在。

关于haskell - xml-conduit:如何仅获取第一个 tbody 和该 tbody 的直接子 tr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25000267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com