XPath для преобразования дочерних элементов в однострочный список - PullRequest
0 голосов
/ 18 мая 2010

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

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

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

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

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

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

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

1 Ответ

1 голос
/ 18 мая 2010

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 языка, если она есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...