2014-10-02 4 views
5

XPath 사양 버전이 XML :: LibMXL에 구현되어 있는지 아는 사람이 있습니까?XML :: LibXML에는 어떤 XPath 버전이 구현되어 있습니까?

이상은 어디에서 LibXML에서 사용할 수있는 XPath 함수에 대한 설명을 찾을 수 있습니까? 예를 들어

, 나는 잘 작동하는 것 같다

$dcDOM->findvalue('//dc:identifier[contains(@xsi:type,"URI")]'); 

같은 시도했지만

$dcDOM->findvalue('//dc:identifier[matches(@xsi:type,"URI")]'); 

하지 않습니다.

XPath 1.0 또는 1.0/2.0의 일부 하위 집합을 지원한다고 가정해야합니다.

모든 것이 나열되고 설명되는 깔끔한 페이지가 있습니까?

답변

8

프로브에서 추측했듯이 XML :: LibXML은 XPath 1.0 (2.0 아님)을 지원합니다.

일반적으로 은 이러한 프로브를 사용하는 것 이외의 다른 버전을 확인할 수있는 방법이 없습니다. 반면에 XSLT는 버전 정보를 식별하기 위해 system-property('xsl:version')을 제공합니다. libxml2를에 XML :: LibXML is based, implements XPath를 1.0으로 바로 libxml2를 홈페이지에 명시된 :

libxml2를가 언어를 마크 업에 관련된 기존의 표준들을 구현하는 소스 유산 길을가는

:

 XML Path Language (XPath) 1.0: http://www.w3.org/TR/xpath 

당신은 Why doesn't libxml2 support XPath 2.0?를 요청하거나 XPath를 2.0 사양은 "너무 크고 intrusi이다라는 old post from maintainer Daniel Veillard를 읽을 수 있습니다 ve "를 사용하지만 결론은 그대로 유지됩니다. XML :: LibXML은 2.0이 아닌 XPath 1.0을 지원합니다.

2

XML :: LibXML은 libxml에 대한 인터페이스이므로 설치 한 버전을 찾아야합니다. 당신이 어떻게 당신의 OS에 따라 달라집니다,하지만 당신은 xsltproc 또는 xmllint의 버전, 예컨대 :

$ xsltproc --version 
Using libxml 20900, libxslt 10128 and libexslt 817 
xsltproc was compiled against libxml 20900, libxslt 10128 and libexslt 817 
libxslt 10128 was compiled against libxml 20900 
libexslt 817 was compiled against libxml 20900 

그래서있어 libxml v2.2.9을 확인할 수 있습니다.

위키피디아의 모든 지혜에 따르면 libxml2는 XPath 1.0 만 구현합니다.

+0

좋은 지적이지만, Windows에서 확인하는 방법을 모르겠습니다 ... libxml 2.x 여야합니다. 하지만 어쨌든 내 질문에 나는 그것이 일치()가 작동하지 않기 때문에 XPath 1.0을 지원한다고 가정한다. – jackthehipster

+0

@jackthehipster는 알아내는 가장 빠른 방법입니다.'for $ a in과 같이 확실히 2.0 표현을 시도해보십시오. $ a'를 반환하고 불평하는지 확인하십시오. –

+1

@jackthehipster 매우 강력하게 제안하는 다른 하나는 1입니다.0-only는 문서가 "시퀀스"가 아닌 "노드 집합"에 대해 이야기하고 v2.0에서 사용되는 XML 스키마 유형을 참조하기보다는 유형을 "숫자"및 "문자열"로 설명합니다. –