我很难为这个创建一个标题!
下面是我正在解析的示例HTML
- 为了简洁起见,部分被截断,但希望有足够的人能够理解我正在寻找的内容。
我希望在示例代码的最底部标识INPUT
。
我不能使用ID
,因为它会不断变化。即id="id_mstr111_txt"
让我用英语尽我所能描述我想要达到的目标:
找到
INPUT
...在DIV
下class="mstrPromptQuestion"
作为后代...... span
class="mstrPromptQuestionTitleBarTitle">Abstracted Period
或写另一种方式:
给定
DIV
class="mstrPromptQuestion"
,其中包含深度嵌入的子节点:spanclass="mstrPromptQuestionTitleBarTitle">Abstracted Period
找到INPUT
(不使用ID
,因为数字会随着每次构建而变化)
我不确定XPath 2.0
和jquery
是否可行,只有BASIC xpath
功能。
<div id="id_mstr85" **class="mstrPromptQuestion"** style="display: block;">
<span class="mstrPromptQuestionRequired">
<div class="mstrPromptQuestionTitleBar">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="middle" align="left">
<span class="mstrPromptQuestionTitleBarIndex" style="display: inline;">2.</span>
<span **class="mstrPromptQuestionTitleBarTitle">Abstracted Period**</span>
<span class="mstrPromptQuestionTitleBarRequired" title="(Required)">(Required)</span>
</td>
</tr>
</tbody>
</table>
</div>
<table class="mstrPromptQuestionInfoTable" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="mstrPromptQuestionInfoCellLeft">
<td class="mstrPromptQuestionInfoCellRight">
</td>
</td>
</tr>
</tbody>
</table>
<div class="mstrPromptQuestionContents">
<table class="mstrPromptQuestionSimpleAnswerViewTitle" style="display: none;" cellspacing="0" cellpadding="0">
<div class="mstrPromptQuestionSimpleAnswerView" style="padding-left: 0px;" onmousedown="this.previousSibling.rows[0].cells[0].childNodes[0].checked = true; mstr.behaviors.PromptQuestion.onClickRadio('id_mstr85', false)">
<table id="id_mstr89" class="mstrListCart" style="display: table;" cellspacing="0" cellpadding="0">
<colgroup>
<tbody>
<tr>
<td class="mstrListCartCellAvailableHeader">
<table class="mstrListCartTablePathView" cellspacing="0" cellpadding="0">
<div id="id_mstr108" class="mstrSearchField" title=" style=" display: block;="">
<table class="mstrSearchFieldTable" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="mstrSearchFieldSearchBox">
<div id="id_mstr111" class="mstrTextBoxWithIcon" title=" style=" display: block;="">
<div class="mstrTextBoxWithIconCaption">
<table class="mstrTextBoxWithIconTable" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="mstrTextBoxWithIconCellInput">
<div><**input** id="id_mstr111_txt" maxlength="" onclick="if (mstr.utils.ISW3C) {this.focus();}" onkeypress="return mstr.behaviors.TextBoxWithIcon.onkeypress(arguments[0], self, 'id_mstr111', this.value)" name="id_mstr111_txt"
style="background-color: rgb(255, 255, 255);" size="" type="text" /></div>
</td>
答案 0 :(得分:0)
用英语描述:
//div[@class='mstrPromptQuestion'][.//span[@class='mstrPromptQuestionTitleBarTitle']]//input[contains(@id, '_txt')]
写另一种方式是相同的,只有你指定不使用id。
根据属性或基于孩子识别唯一的父级,并从那里继续。
对于上述xpath,您还可以向范围添加文本约束,如
[contains(text(), 'Abstracted Period')]
导致类似:
//div[@class='mstrPromptQuestion'][.//span[@class='mstrPromptQuestionTitleBarTitle'][contains(text(), 'Abstracted Period')]]//input[contains(@id, '_txt')]
答案 1 :(得分:0)
如果您确定它是input
中的最后一个div
,您可以执行以下操作:
(//div[@class='mstrPromptQuestion']//input)[last()]
或类似的东西:
(//div[@class='mstrPromptQuestion' and .//span[@class='mstrPromptQuestionTitleBarTitle']='Abstracted Period']//input)[last()]
如果mstrPromptQuestionTitleBarTitle
很重要。