2010-05-18 6 views
0

Мне нужен код XPath, чтобы принимать дочерние элементы (один или несколько) и помещать их в одну строку, разделенные запятыми.XPath для преобразования дочерних элементов в один список строк

Так что, если у меня есть следующий XML:

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

Я хочу следующий вывод:

Боб Смит, Мэри Джонс, Сэм Doe

Он должен быть умным достаточно, чтобы оставить запятую последнего автора. И может быть только один автор.

Большое спасибо

+0

Будьте честны, это домашнее задание? – Boldewyn

+0

@Boldewyn, у меня есть тот же вопрос, и это не для homewokr. –

ответ

1

XPath не является инструментом преобразования, так что вы не можете использовать его в покое, чтобы делать то, что вы хотите. Возможно, вы думаете о XSL, который использует XPath и способен преобразовывать данные.

XPath выражение, которое может извлекать данные из вашего примера XML будет

/Authors/Author 

Тогда в какой бы то, что вы используете, чтобы выполнить выражение XPath на документ (будь то 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 'string-join', которая доступна, если у вас есть XPath 2.0 в вашем распоряжении. В этом случае вы можете пойти с 'string-join (/ Authors/Author, ',')', чтобы делать то, что вы хотите. Лично мне не нравится использовать XPath для струнных манипуляций, так как это так чертовски плохо. Но это возможно. – Welbog

+0

@weblog: Xpath совсем не плох при манипулировании строкой. C# все еще не имеет функции 'translate()' !. XPath 2.0 имеет функции Regex. Итак, что еще вам нужно? –

+0

@Dimitre: Действительно моя схватка с XPath 1.0. Я просто горький. – Welbog

Смежные вопросы