使用PHP或XSLT编辑xml文件

时间:2014-12-04 22:35:45

标签: php xml xslt feed

我需要你的大力帮助,我完全迷失在这个问题上,我一直在谷歌搜索,但没有什么可以帮助我。当我找到一些解决方案时,它没有用.....请帮我请求:/

在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>

1 个答案:

答案 0 :(得分:1)

学习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(。)}(当前节点的名称)替换为您要将其更改为的内容。

那应该让你开始,其余的由你决定。