Внесение регулярных выражений в строку с форматом xml - PullRequest
0 голосов
/ 12 января 2011

У меня есть следующий XML в строке.

<field1 param1="value" hun="true">
<field2 hun="true">
<field3 param2="value" hun="true">

Я хочу найти каждый экземпляр hun="true"> и добавить еще одно поле xml <newxml value="number"> Так что мой xml будет выглядеть так

<field1 param1="value" hun="true">
<newxml value="number">
<field2 hun="true">
<newxml value="number">
<field3 param2="value" hun="true">
<newxml value="number">

Ответы [ 2 ]

1 голос
/ 12 января 2011

Я не рекомендую регулярное выражение (или даже любой инструмент для работы со строками) для изменения XML.Вместо этого запустите ваш XML через эту небольшую таблицу стилей XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- this template copies your input XML unchanged... -->
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*" />
    </xsl:copy>
  </xsl:template>

  <!-- ...except for anything with hun="true", where it adds a new element -->
  <xsl:template match="*[@hun = 'true']">
    <xsl:copy-of select="." />
    <newxml value="number" />
  </xsl:template>
</xsl:stylesheet>

Функция PHP, используемая для этой задачи: xslt_process() ( см. Документы ).

Комутолько добавьте <newxml value="number" /> там, где его нет, второй шаблон изменится на:

  <xsl:template match="*[@hun = 'true' 
                         and not(following-sibling::*[1][self::newxml])]
  ">
    <xsl:copy-of select="." />
    <newxml value="number" />
  </xsl:template>
0 голосов
/ 12 января 2011

возможно, вы могли бы сделать простую замену строки в строке, заменяя каждый экземпляр 'hun = "true"' на 'hun="true"><newxml value="number">'

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