XPath 표현식 만 사용하면 (XSLT 또는 DOM이 아닌 순수한 XPath 만 사용) 현재 노드 (td)에서 관련 td까지 상대 경로를 만들려고합니다. 같은 HTML 표의 같은 열에XPath 1.0을 사용하여 HTML 표 열 탐색
<table>
<tr> <td><a>Blue Jeans</a></td> <td><a>Shirt</a></td> </tr>
<tr> <td><span>$21.50</span></td> <td><span>$18.99</span></td> </tr>
</table>
나는 "청바지"으로 a에있어 및 가격 ($ 21.50)을 찾으려면 :
예를 들어, 나는 이런 유형의 데이터가 있다고 가정합니다. XSLT, 나는 이렇게 답을 얻기 위해 현재의() 함수를 사용할 수 있습니다
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:apply-templates select="//a" />
</xsl:template>
<xsl:template match="a">
Name: <xsl:value-of select="."/>
Price: <xsl:value-of select="../../following-sibling::tr[1]/td[position() = count(current()/../preceding-sibling::td) + 1]" />
</xsl:template>
</xsl:stylesheet>
을하지만 실행 해요 문제가 있다는 것입니다 전류()의 XPath 1.0에 정의했다.하지 나는 self :: axis를 사용하려했지만 "." 단축형은 "현재"노드가 아니라 "컨텍스트"노드 만 가리킨다. XPath standard에서 볼 수있는 언어는 XPath에 "현재 노드"개념이 없음을 나타냅니다.
이 경로를 형성하는 또 다른 방법이 있을까요? 아니면 XPath의 제한 사항입니까?
아, 예, colspan은 거기에 있었다면 문제가 될 수 있습니다. 그러나 나는 처리하려고하는 데이터에 그 중 하나가 있다고 생각하지 않습니다. 이 대답은 모든 요소에 대해 일반적으로 작동하지 않는 것 같지만 지금은 "다음 ::"축을 사용하여 실험하고 있습니다. (유일하게 잡히는 점은 내 데이터의 일부가 테이블 안의 테이블 안의 테이블로 가득 차 있다는 것입니다.) –
@Orion Ifland : * 입력 내용의 모든 'a'요소와 함께 작동합니다. * 테스트해야합니다. 일반적인 해결책은 없습니다. 입력 구조체가 다르면 다시 질문하거나 질문에 샘플을 추가해야합니다. –
위의 스타일 시트를 사용하여 테스트했지만 어떤 가격도받지 못했습니다. 당신이 준 경로는 절대 경로이며, 같은 열에있는 요소와 요소 사이의 상대 경로를 찾고있었습니다. 기능적으로 xsl : value-of의 표현식과 기능이 같지만 "current()"함수. –