我应该为此使用 Xpath 还是正则表达式?
Should I use Xpath or regexp for this?
我不是语言专家,也没有任何语言知识。我正在从一个半动态的网站中提取数据。
例如,我需要为 "Advising on a home purchase plan - Customer Type" 和 "Advising on a home purchase plan - Investment Type" 设置 2 列,它们将列出客户和投资的类型(每个可以是多个)它们可以进入一个单元格但有某种类型分隔符,例如“;”。
这是 table 的样子
代码如下所示:
建议购房计划
<div id="a2Nb000000035ohEAA" class="collapse DisciplineDetails PassportDetails PermDesc">
<h3 class="PermissionsListHeader">Advising on a home purchase plan</h3>
<br>
<br>
</div>
<ul class="PermissionConditionsList">
<li class="PermissionsConditionsItem">
Customer Type
<ul class="PermCondsLimitationsList">
<li style="list-style: none"><span id="j_id0:j_id1:j_id110:regActTable:0:j_id531:0:j_id533:0:j_id535:0:j_id538"></span></li>
<li class="PermCondsLimitationsItem Popover">Customer</li>
</ul>
</li>
</ul>
<ul class="PermissionConditionsList">
<li class="PermissionsConditionsItem">
Investment Type
<ul class="PermCondsLimitationsList">
<li style="list-style: none"><span id="j_id0:j_id1:j_id110:regActTable:0:j_id531:1:j_id533:0:j_id535:0:j_id538"></span></li>
<li class="PermCondsLimitationsItem Popover">Home purchase plans</li>
</ul>
</li>
</ul>
</div>
如果没有其他列表包含这些 类 但不应考虑,则此 xpath 有效。
//ul[@class='PermCondsLimitationsList']/li[@class='PermCondsLimitationsItem Popover']/(text()|span/text()))[normalize-space(.)]
已测试here
只获得标题:
//ul[@class='PermissionConditionsList']/li[@class='PermissionsConditionsItem']/text()[normalize-space(.)]
合并:
//ul[@class='PermissionConditionsList']/li[@class='PermissionsConditionsItem']/(text()|ul[@class='PermCondsLimitationsList']/li[@class='PermCondsLimitationsItem Popover']/(text()|span/text()))[normalize-space(.)]
但要以某种格式获得两者,XSLT 可能更有用。
如果您有 chrome,您可以通过右键单击所需区域并转到 -> 检查来查看元素的 xpath。源代码的相关部分将被突出显示。从那里您可以通过右键单击突出显示代码并转到复制 -> 复制 XPath 来获取 xpath。
我不是语言专家,也没有任何语言知识。我正在从一个半动态的网站中提取数据。
例如,我需要为 "Advising on a home purchase plan - Customer Type" 和 "Advising on a home purchase plan - Investment Type" 设置 2 列,它们将列出客户和投资的类型(每个可以是多个)它们可以进入一个单元格但有某种类型分隔符,例如“;”。
这是 table 的样子
代码如下所示:
建议购房计划
<div id="a2Nb000000035ohEAA" class="collapse DisciplineDetails PassportDetails PermDesc">
<h3 class="PermissionsListHeader">Advising on a home purchase plan</h3>
<br>
<br>
</div>
<ul class="PermissionConditionsList">
<li class="PermissionsConditionsItem">
Customer Type
<ul class="PermCondsLimitationsList">
<li style="list-style: none"><span id="j_id0:j_id1:j_id110:regActTable:0:j_id531:0:j_id533:0:j_id535:0:j_id538"></span></li>
<li class="PermCondsLimitationsItem Popover">Customer</li>
</ul>
</li>
</ul>
<ul class="PermissionConditionsList">
<li class="PermissionsConditionsItem">
Investment Type
<ul class="PermCondsLimitationsList">
<li style="list-style: none"><span id="j_id0:j_id1:j_id110:regActTable:0:j_id531:1:j_id533:0:j_id535:0:j_id538"></span></li>
<li class="PermCondsLimitationsItem Popover">Home purchase plans</li>
</ul>
</li>
</ul>
</div>
如果没有其他列表包含这些 类 但不应考虑,则此 xpath 有效。
//ul[@class='PermCondsLimitationsList']/li[@class='PermCondsLimitationsItem Popover']/(text()|span/text()))[normalize-space(.)]
已测试here
只获得标题:
//ul[@class='PermissionConditionsList']/li[@class='PermissionsConditionsItem']/text()[normalize-space(.)]
合并:
//ul[@class='PermissionConditionsList']/li[@class='PermissionsConditionsItem']/(text()|ul[@class='PermCondsLimitationsList']/li[@class='PermCondsLimitationsItem Popover']/(text()|span/text()))[normalize-space(.)]
但要以某种格式获得两者,XSLT 可能更有用。
如果您有 chrome,您可以通过右键单击所需区域并转到 -> 检查来查看元素的 xpath。源代码的相关部分将被突出显示。从那里您可以通过右键单击突出显示代码并转到复制 -> 复制 XPath 来获取 xpath。