XPath - 前一个兄弟包含元素检查

时间:2017-11-07 13:02:53

标签: html xml xpath

我在网页上有以下简化的HTML ...

<div class="row import-entity">
    <div class="col-md-11">
        <div class="row">
            <div class="col-md-3">
                <span class="mandatory"></span>
            </div>
            <div class="col-md-3">
                <input id="ImportTemplateEntities_2918.Header" type="hidden"></input>
                <input id="ImportTemplateEntities_5923.Header"></input>
            </div>
            <div class="col-md-3">
                <input id="ImportTemplateEntities_1234.Column"></input>
            </div>
            <div class="col-md-3"></div>
        </div>
        <div class="row">
            <div class="col-md-3"></div>
            <div class="col-md-3">
                <input id="ImportTemplateEntities_9182.Header" type="hidden"></input>
                <input id="ImportTemplateEntities_2834.Header"></input>
            </div>
            <div class="col-md-3">
                <input id="ImportTemplateEntities_1243.Column"></input>
            </div>
            <div class="col-md-3"></div>
        </div>
    </div>
</div>

需要以下XPath选择标准......

  • col-md-3之后的 col-md-3 div 内的输入标记 div 包含范围,类=强制
  • 输入标记不应隐藏

上述HTML中的以下元素与搜索条件匹配

<input id="ImportTemplateEntities_5923.Header"></input>

(请注意,ID中的数值是动态分配的,在搜索文档时我不会知道。)

在添加任何前面的兄弟姐妹检查之前,这就是我拥有的......

//input[contains(@id,'ImportTemplateEntities')][contains(@id,'Header')][not(contains(@type,'hidden'))]

如何编辑此内容以添加条件,以检查前一个兄弟div是否包含span class = mandatory

1 个答案:

答案 0 :(得分:1)

这个XPath,

//input[contains(@id,'ImportTemplateEntities')]
       [contains(@id,'Header')]
       [not(@type='hidden')]
       [../preceding-sibling::div[span/@class='mandatory']]

将选择input属性值包含所指明的子字符串的所有id元素,而没有type属性,其值为hidden 其父级具有前一个兄弟div元素,其子span具有class属性,其值为mandatory,具体请求。