내가 좋아하는 변수 타입의 시리즈가 변할 때의 XPath 쿼리는 XML 형식
<area name="DataMap">
<int name="number" nullable="true">
<case var="abc2,abc3,abc5">11</case>
<case var="abc4,abc6*">8</case>
<case var="data1,xyz7,xyz8">22</case>
<case var="data3A,xyz{9},xyz{5A,5B,5C}">24</case>
<case var="xyz{6,4A,4B,4C}">20</case>
<case var="other01">15</case>
</int>
</area>
내가 쿼리를 바라고 무엇 인스턴스와 같은 예를 들어 xyz5A는에 매핑됩니다. 쿼리는 24를 반환해야하지만 xml 노드의 해당 참조가 "xyz4A"와 같이 명시 적이거나 "xyz4 *"와 같은 와일드 카드를 사용하거나 위와 같이 중괄호를 사용하면 미리 알 수 없습니다.
그 라인에 문자열이 쿼리를 성공적으로 히트 반환합니다
xpath '/area[@name="DataMap"]/int[@name="number"]/case[contains(@var,"xyz")][contains(@var,"5A")]'
을 그러나 그것은 또한 잘못된하지 data5A의 히트 반환
xpath '/area[@name="DataMap"]/int[@name="number"]/case[contains(@var,"data")][contains(@var,"5A")]'
이 XPath는/기타됩니다 위의 일관성없는 (그러나 나는 유효한) xml을 구문 분석하는 쿼리 구문? 와일드 카드와 중괄호 형식에 비해 명시 적 문자열 일치에 대해 쿼리 할 수있는 것 같습니다.
XPath 1.0 또는 XPath 2.0? (2.0에서는 정규 표현식과 '일치'가 도입되었습니다.) –
좋은 지적. 나는 아직도 1.0이라고 생각하는 bash/perl을 사용하고있다. XPath 2.0으로 쿼리하는 실질적인 방법이 있다면, 좋습니다. 예를 들어 Java 라이브러리에 액세스 할 수는 있지만 쿼리 할 필요가있는 모든 시스템에서 확실하지 않습니다. – mmond