이 HTML이 있습니다:
<tr class="even expanded first>
<td class="score-time status">
<a href="/matches/2012/08/02/europe/uefa-cup/">
16 : 00
</a>
</td>
</tr>
여분의 공백 없이 (16 : 00) 문자열을 추출하고 싶습니다. 이것이 가능한가요?
I. 이 단일 XPath 표현식을 사용합니다:
translate(normalize-space(/tr/td/a), ' ', '')
설명:
normalize-space()
는 인자로부터 새 문자열을 생성하며, 이 문자열은 선행 또는 후행 공백(공백, 탭, NL 또는 CR 문자)이 삭제되고 중간 공백이 단일 공백 문자로 대체됩니다.
translate()
는 normalize-space()
가 생성한 결과를 가져와 나머지 중간 공백을 각각 빈 문자열로 대체하는 새 문자열을 생성합니다.
II. 대안:
translate(/tr/td/a, '

', '')
를 사용하면 text() 노드가 비어 있는지 확인할 수 있습니다.
/path/text()[not(.='')]
컨테이너가 없는 경우 다음 형제:: 또는 자식:: 같은 축과 함께 사용하면 유용할 수 있습니다.
참고: 일부 의견에 따르면 xpath는 문자열 조작을 할 수 없다고 합니다... 실제로는 그렇게 설계되지 않았더라도 contains(), starts-with(), replace()와 같은 기본적인 작업을 수행할 수 있습니다.
공백 노드를 확인하려는 경우 일반적으로 노드 목록 결과 집합이 있고 일치 또는 바꾸기와 같은 대부분의 xpath 함수는 하나의 노드만 작동하기 때문에 훨씬 더 어렵습니다.
따라서 xpath를 사용하여 컨테이너 또는 텍스트 노드 목록을 검색한 다음 다른 언어로 처리할 수 있습니다. (예: 자바, php, 파이썬, 펄).
이 때 내가 내 스스로 문제를 위와 유사한 왔는지 구현하므로 스레드할 한다는 것이었다.
HTML
<div class="d-flex">
<h4 class="flex-auto min-width-0 pr-2 pb-1 commit-title">
<a href="/nsomar/OAStackView/releases/tag/1.0.1">
1.0.1
</a>
XPath start 명령을
tree.xpath('//div[@class="d-flex"]/h4/a/text()')
그러나 이 공백을 임의적입니까 (네덜란드) 와 내게 준 출력물에는 다음과 같다.
['\n ', '\n 1.0.1\n ']
첫 번째 절 떠난 빈 공간을 사용하여 물론 공간 얻게된다면 재거됨 노드와 부트해 내가 원했던
tree.xpath('//div[@class="d-flex"]/h4/a/text()[normalize-space()]')
['\n 1.0.1\n ']
다음 목록의 첫 번째 요소 및 사용 할 수 있는 한 눈, 스트립 () 를 추가로 분리하십시오 공백
XPath 마지막 명령
tree.xpath('//div[@class="d-flex"]/h4/a/text()[normalize-space()]')[0].strip()
남아 있는 나에게 정확히 내가 필요합니다.
1.0.1