2

내가, 내가셀레늄 IDE 1.9.1 XPath는 선택

'존 이름으로 사용자 이름 필드를 넣어하려고 사용자가 브라우저 예를 들어

와 상호 작용 시뮬레이션 소프트웨어 이름 셀레늄 (웹 쥐)를 사용하려고 포함 내 구문 따르는

'이름 입력란'의 'ID'는 username_947232가 그러나

, username_ username_8237

포맷 [난수]

,
//*[contains(@id="username_(/\d+/)")] 

하지만 제대로 작동하지 않습니다.

의견을 보내 주셔서 감사합니다. 당신이 마지막에 숫자 이외의 가능성이있는 경우이 최적이 아닐 수도 있지만

답변

3

사용 :

//*[starts-with(@id, 'username_') 
    and 
    floor(substring-after(@id, 'username_')) = substring-after(@id, 'username_') 
    ] 

설명는 :

이 표현은 그 id 속성 문자열 값 문자열로 시작하는 요소를 선택이고이 문자열의 나머지 (시작 후 "username_" 이후)는 정수입니다. 이 변환 인 경우

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:copy-of select= 
     "//*[starts-with(@id, 'username_') 
    and 
    floor(substring-after(@id, 'username_')) = substring-after(@id, 'username_') 
    ] 
    "/> 
</xsl:template> 
</xsl:stylesheet> 

: 기반 검증 -

floor($string) = $string 

XSLT : 및 경우에만 $string 정수를 나타내는 경우 여기

우리는 다음과 같은 표현식이 참 사실을 사용 이 XML 문서에 적용됨 :

<t> 
<user id="username_Xyz"/> 
<user id="username_Xyz123"/> 
<user id="username_123Xyz"/> 
<user id="username_123Xyz456"/> 
<user id="username_2015"/> 
</t> 

XPath 식을 평가하고,이 평가에서 선택된 노드는 출력에 복사됩니다 :

<user id="username_2015"/> 

주의 마십시오 :이 질문에 대한 다른 두 답변의 모든 5 개 user 요소를 선택할 것 위의 문서 - 물론 잘못된 것입니다.

+0

+1, 흥미로운 방법. 나는 그것이 그가 요구하는 복잡성 수준에 달려 있다고 생각한다. – Arran

+0

@Arran, 여러분은 환영합니다. 이 대답의 XPath 식은 모든 복잡성 수준의 XML 문서에서 올바르게 작동합니다.'$ string'이 정수의 문자열 표현 인 경우'floor ($ string) = $ string' 표현식은'true()'입니다. –

-1

당신은

//*[contains(@id, 'username_')] 

을 사용할 수 있어야합니다.

0

사용 starts-with

//*[starts-with(@id, "username_")]