我有以下XML,以及包含ID类别的产品的文件。 xml的最后一行包含带有名称的ID类别和带有名称的父ID类别。
我需要更改名称的产品ID类别,并安排类别和父类别。 有输入XML:
<Export>
<Products>
<produkt>
<Nazev>forma 21cm skl.</Nazev>
<Code>200011</Code>
<Kategorie>3</Kategorie>
</produkt>
</Products>
</Export>
<Categories>
<kategorie><id>1</id><ParentId></ParentId><Nazev>category1</Nazev></kategorie>
<kategorie><id>2</id><ParentId>1</ParentId><Nazev>category2</Nazev></kategorie>
<kategorie><id>3</id><ParentId>2</ParentId><Nazev>category3</Nazev></kategorie>
</Categories>
</Export>
这里是输出XML:
<Export>
<Products>
<produkt>
<Nazev>forma 21cm skl.</Nazev>
<Code>200011</Code>
<Kategorie>category2 > category2 > category3</Kategorie>
</produkt>
</Products>
</Export>
但我不知道如何使用XSL或PHP脚本。
答案 0 :(得分:0)
这是一个棘手的问题。试试这种方式:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kategorie" match="kategorie" use="id" />
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Kategorie">
<xsl:copy>
<xsl:apply-templates select="key('kategorie', .)"/>
</xsl:copy>
</xsl:template>
<xsl:template match="kategorie">
<xsl:if test="key('kategorie', ParentId)">
<xsl:apply-templates select="key('kategorie', ParentId)" />
<xsl:text disable-output-escaping="yes"> > </xsl:text>
</xsl:if>
<xsl:value-of select="Nazev" />
</xsl:template>
<xsl:template match="Categories"/>
</xsl:stylesheet>
应用于格式良好的(!)输入:
<Export>
<Products>
<produkt>
<Nazev>forma 21cm skl.</Nazev>
<Code>200011</Code>
<Kategorie>3</Kategorie>
</produkt>
</Products>
<Categories>
<kategorie>
<id>1</id>
<ParentId/>
<Nazev>category1</Nazev>
</kategorie>
<kategorie>
<id>2</id>
<ParentId>1</ParentId>
<Nazev>category2</Nazev>
</kategorie>
<kategorie>
<id>3</id>
<ParentId>2</ParentId>
<Nazev>category3</Nazev>
</kategorie>
</Categories>
</Export>
结果将是:
<?xml version="1.0" encoding="UTF-8"?>
<Export>
<Products>
<produkt>
<Nazev>forma 21cm skl.</Nazev>
<Code>200011</Code>
<Kategorie>category1 > category2 > category3</Kategorie>
</produkt>
</Products>
</Export>