我需要你的大力帮助,我完全迷失在这个问题上,我一直在谷歌搜索,但没有什么可以帮助我。当我找到一些解决方案时,它没有用.....请帮我请求:/
在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>
答案 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(。)}(当前节点的名称)替换为您要将其更改为的内容。
那应该让你开始,其余的由你决定。