XPath 표현식에서 Regex를 사용할 수 있습니까?
문제
같은 것 .//div[@id='foo\d+]
div 태그를 캡처합니다 id='foo123'
.
그럴 경우 .NET을 사용하고 있습니다.
해결책
다른 답변이 지적했듯이 xpath 1.0 정규 표현을 지원하지 않습니다.
그럼에도 불구하고 다음 옵션이 있습니다:
- XPath 1.0 표현식을 사용하십시오 (참고
starts-with()
그리고translate()
기능) : 다음 :
.//div [starts-with(@id, 'foo') and 'foo' = translate(@id, '0123456789', '') and string-length(@id) > 3 ]
사용 exslt.net - 방법이 있습니다 XSLT를 사용하지 않고 XPath 표현식에서 직접 기능을 사용하십시오.. Regex-ES를 사용할 수있는 Exslt 확장 기능은 다음과 같습니다.
regexp:match()
,regexp:replace()
그리고regexp:test()
사용 xpath 2.0/XSLT 2.0 그리고 그것 정규 표현에 대한 내장 지원 (기능 성냥(), 바꾸다() 그리고 토큰 화 ())
다른 팁
XPath 2.0에는 정규 표현식을 지원하는 몇 가지 기능이 있습니다. matches()
, replace()
, tokenize()
.
XPath 1.0에는 REGEX 지원이 없습니다.
.NET의 경우 Saxon.net의 XPath 엔진을 사용하여 XPath 2.0을 지원할 수 있습니다.
따라서 Saxon.net에서 XPath 2.0 엔진을 사용하는 경우 예제가 다음과 같습니다. .//div[matches(@id,'foo\d+')]
.
.NET에서는 확장 객체를 통해 사용자 정의 클래스에 액세스 할 수 있습니다 (따라서 필요에 맞게 적절하게 코딩 할 수있는 경우 Regex).
지도 시간 여기.
나는 또한 이것을하고 싶었으므로 내 자신의 기본을 만들었습니다. xpath 모듈.