2010-05-18 3 views
0

자식 요소 (하나 이상)를 가져와 쉼표로 구분하여 한 줄에 넣으려면 XPath 코드가 필요합니다.자식 요소를 단일 행 목록으로 변환하는 XPath

그래서 나는 다음과 같은 XML이있는 경우 :

<Authors> 
    <Author>Bob Smith</Author> 
    <Author>Mary Jones</Author> 
    <Author>Sam Doe</Author> 
</Authors> 

나는 다음과 같은 출력을 원하는 :

밥 스미스, 메리 존스, 샘 미상

그것은 똑똑 할 필요가

마지막 저자의 쉼표에서 벗어나기에 충분합니다. 그리고 저자는 단 한 명일 수도 있습니다. 당신은 당신이 원하는 일을 혼자 사용할 수 없도록

많은 감사

+0

솔직히 말해서, 숙제입니까? – Boldewyn

+0

@ Boldewyn, 나는 똑같은 질문이 있는데 그것은 homewokr을위한 것이 아니다. –

답변

1

XPath는 변환 도구가 아닙니다. XPath를 사용하고 데이터를 변환 할 수있는 XSL을 생각할 수도 있습니다. 당신의 XML 예제에서 데이터를 뽑을 수

XPath 표현식은 당신이 (문서에 XPath 식을 실행 할 때 사용하는 것을 무엇이든에 그런

/Authors/Author 

것 그것은 XSL 또는 일부 XML 라이브러리) 결과를 반복하여 원하는 출력을 만들 수 있습니다.

XSL에서 당신은이 라인을 따라 뭔가를 할 수 :

<xsl:for-each select="/Authors/Author"> 
    <xsl:if test="position() != 1"> 
    <xsl:text>, </xsl:text> 
    </xsl:if> 
    <xsl:value-of select="text()"/> 
</xsl:for-each> 

다른 언어가 하나있는 경우 가능성이 언어의 join 기능을 사용하여, 더 간단 할 것이다.

+0

당신이 XPath 2.0을 사용할 수 있다면 XPath 함수'string-join'에 대해 이야기하고 있을지도 모릅니다. 이 경우'string-join (/ Authors/Author, ',')'과 함께 원하는 것을 할 수 있습니다. 개인적으로는 XPath를 문자열 조작에 사용하는 것이 좋지 않습니다. 하지만 가능합니다. – Welbog

+0

@weblog : Xpath는 문자열 조작시 전혀 나쁘지 않습니다. C#에는 여전히'translate()'함수가 없습니다!. XPath 2.0에는 Regex 함수가 있습니다. 그래서, 당신은 무엇을 더 필요로합니까? –

+0

@ Dimitre : 실제로 내 불만은 XPath 1.0입니다. 나는 단지 쓴맛이야. – Welbog

관련 문제