Редактировать XML-файл с помощью PHP или XSLT

Мне нужна большая помощь от вас, я полностью потерялся в этой проблеме, я все время гуглю, но ничего, что может мне помочь. Когда я нашел некоторые решения, это не сработало ….. Помогите мне, пожалуйста: /

Отредактируйте его в PHP или XSLT, Thx.

Входные данные:

<SHOP>
<SHOPITEM>
<PRODUCTNAME>Table</PRODUCTNAME>
<DESCRIPTION>slaklasdk askdalsd dsasd</DESCRIPTION>
<URL>http://www.google.com/</URL>
<IMGURL>http://www.google.com/</IMGURL>
<PRICE>79</PRICE>
<CATEGORIES>
<CATEGORY>Work, table</CATEGORY>
</CATEGORIES>
<MOTIVES>
<MOTIVE>Brown oak</MOTIVE>
</MOTIVES>
<SIZES>
<SIZE>
<SIZEID>38626</SIZEID>
<SIZENAME>uni</SIZENAME>
<STOREPIECES>12</STOREPIECES>
</SIZE>
</SIZES>
</SHOPITEM>
<SHOPITEM>
<PRODUCTNAME>Book</PRODUCTNAME>
<DESCRIPTION>asdasdasdawra asdaseasd</DESCRIPTION>
<URL>http://www.google.com/</URL>
<IMGURL>http://www.google.com/</IMGURL>
<PRICE>79</PRICE>
<CATEGORIES>
<CATEGORY>Book, Magazine</CATEGORY>
</CATEGORIES>
<MOTIVES>
<MOTIVE>Black with blue stars</MOTIVE>
</MOTIVES>
<SIZES>
<SIZE>
<SIZEID>38626</SIZEID>
<SIZENAME>uni</SIZENAME>
<STOREPIECES>0</STOREPIECES>
</SIZE>
</SIZES>
</SHOPITEM>

Я НУЖДАЮСЬ:

1) Удалить <URL> and <IMGURL>

2)<PRODUCTNAME> переименовать <title>

3)<CATEGORIES> удалить и переименовать <CATEGORY> on <ctg_0>

4)<MOTIVE> слиться с <DESCRIPTION> и удалить <MOTIVES>,<MOTIVE>

5) удалить <SIZES>, <SIZE> and <SIZEID> после этого <SIZENAME> слиться с <DISCRIPTION> и добавить новый элемент <unit>0</unit> и переименовать <STOREPIECES> на <pieces>

Выход:

<SHOP>
<SHOPITEM>
<title>Table</title>
<DESCRIPTION>slaklasdk askdalsd dsasd, Motive:Brown oak, size:uni</DESCRIPTION>
<PRICE>79</PRICE>
<ctg_0>Book, Magazine</ctg_0>
<pieces>12</pieces>
<unit>0</unit>
</SHOPITEM>
<SHOPITEM>
<title>Book</title>
<DESCRIPTION>asdasdasdawra asdaseasd, Motive:Black with blue stars, size:uni</DESCRIPTION>
<PRICE>79</PRICE>
<ctg_0>Book, Magazine</ctg_0>
<pieces>0</pieces>
<unit>0</unit>
</SHOPITEM>
</SHOP>

-4

Решение

Выучи XSL. Быстрый ускоренный курс:
xsl сначала сопоставляет наименее общее соответствие, поэтому если у вас есть правило для * и правило для URL, оно будет применять правило для URL вместо *.
, текущий узел
* все дочерние узлы текущего узла.
text () — это весь текст под текущим узлом или один текстовый узел в совпадении.
@ * — это все атрибуты текущего узла.
name (.) — имя текущего узла.

Следовательно, это рекурсивно копирует (по частям) каждый узел / текст / атрибут в файле:

<xsl:template match="*">
<xsl:element name="{name(.)}">
<xsl:apply-templates select="*|@*|text()"/>
</xsl:element>
</xsl:template>

<xsl:template match="@*|text()">
<xsl:copy-of select='.'/>
</xsl:template>

Теперь добавьте более конкретные совпадения для тех, кого вы хотите изменить. Если вы хотите удалить узел:

<xsl:template match="URL|IMGURL"/><!-- Do nothing, don't copy it -->

Помните, что более конкретное соответствие на первом месте Переименовав узел, замените {name (.)} (Имя текущего узла) тем, на что вы хотите изменить его.

Это должно помочь вам начать, остальное зависит от вас.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]