2012-07-09 4 views
8

.net 2.0 기반의 asp.net 응용 프로그램에서 작업 중입니다.xpath에서 속성과 일치하는 와일드 카드 사용

그리고 XML을 처리 할 때 몇 가지 문제가 발생합니다.

이 같은 XML 있다고 가정

<person name="xxxyx" age="32" /> 

<person name="zzz" age="32" /> 

<person name="yyyxx" age="32" /> 

가 지금은 이름이 포함 yx

가 어떻게 그것을 구현하는 XPath를 사용합니까 사람을 선택하려면를?

"//person[name='yx'"]" 

은 어떻게 퍼지 검색을 할 : 만이 표현은 이름이 정확히 "YX"인 사람과 일치합니다 알고

?

BTW, 일치하는 사람을 "name"과 같은 지정된 속성으로 정렬하는 아이디어는 있습니까?

+0

, 수행은 이것은 XSL 변환을 의미합니까? – hielsnoppe

+0

나는 xsl을 사용한 적이 없다. – hguser

+0

이 도움이됩니다 : http://stackoverflow.com/questions/5607592/xpath-and-wildcards/5607636#5607636 –

답변

9

@Utkanos처럼 //person[contains(@name, 'yx')]은 원하는 노드와 일치해야합니다.

XPath는 적어도 내 지식으로는 노드에서 명령을 제공 할 수 없으며 "중복되지 않은 노드의 순서가 지정되지 않은 노드 집합"을 반환합니다 (1 및 설명 참조). 그러나 버전 2.0에서는 익숙하지 않은 2에 대한 변경 사항이있을 수 있습니다. 정렬을 가정

는이 같은 <xsl:sort />를 사용할 수 XSL 변환에서 수행해야합니다

<xsl:apply-templates select="//person[contains(@name, 'yx')]"> 
    <xsl:sort select="@name" /> 
</xsl:apply-templates> 

여기 문서화 <xsl:sort />에 좀 더 많은 속성이 있습니다 http://www.w3.org/TR/xslt#sorting가 정렬이 수행해야하는 방법

+2

독립 실행 형 XPath에는 정렬 기능이 없다는 사실은 XPath 2.0 (및 실제로 3.0)에도 그대로 유지됩니다. XSLT 또는 XQuery. –

8

기능을 사용하십시오. 또한

//person[contains(@name, 'yx')] 

, 그것은 속성이기 때문에 당신이 name 앞에 @이 필요합니다 유의하십시오.

Demo.

관련 문제