2013-02-22 3 views
1

xml에 쉼표로 구분 된 값이있는 속성이 있습니다. 나는 이것이 좋은 생각이 아니라는 것을 알고 있지만, 지금 당장 그것에 붙어있다.여러 값을 갖는 속성을 사용하여 요소 선택

XPath를 사용하여 일치하는 속성 값을 가진 요소를 선택하고 싶습니다. 부분 일치가 아닌 전체 값만 고려해야합니다. XPath로이 작업을 수행 할 수 있습니까?

예를 들어 아래 C# 코드를 참조하십시오. .NET 4.0을 사용합니다.

string xml = @"<Foos> 
       <Foo Tag=""AA, BB"" /> 
       <Foo Tag=""BB"" /> 
       <Foo Tag=""AAA, BBB"" /> 
       </Foos>"; 

using (StringReader reader = new StringReader(xml)) 
{ 
    XElement doc = XElement.Load(reader); 

    // I like to select elements with tag BB: 
    // <Foo Tag=""AA, BB"" /> 
    // <Foo Tag=""BB"" /> 

    var fooElementsWithTagBB = doc.XPathSelectElements("//Foo[@Tag = 'BB']"); // Selects only <Foo Tag=""BB"" /> 
    fooElementsWithTagBB = doc.XPathSelectElements("//Foo[contains(@Tag, 'BB')]"); // Selects all elements 
} 

은 내가

푸 알고, [@Tag = 'AA, BB'또는 @Tag = 'BB']

이 작동 것을 일반 쿼리를 싶습니다 예.

답변

1

사용 : 쉼표와 다음 값 사이에 공백이 trere있는 경우

//Foo[contains(concat(',',@Tag, ','), ',BB,')] 

, 당신이 다음 XPath 식에 그들을 제거 할 수 있습니다 :

//Foo[contains(concat(',',translate(@Tag, ' ', ''), ','), ',BB,')] 

XSLT를 - 기반 인증 :

이러한 변화는 제공된 XML 문서에 적용 83,210

:

<Foos> 
    <Foo Tag="AA, BB"/> 
    <Foo Tag="BB" /> 
    <Foo Tag="AAA, BBB" /> 
</Foos> 

는 XPath 식을 평가하고,이 평가 (선택된 노드)의 결과는 출력 복사된다

<Foo Tag="AA, BB"/> 
<Foo Tag="BB"/> 

설명 :

이것은 그림입니다 sentinel programming입니다.

+0

감사합니다. 정말 멋진 솔루션입니다. –

+0

@WallstreetProgrammer, 여러분은 환영합니다. –

관련 문제