XSLT 计算元素值并使用该值创建新元素
XSLT count element value and create new element with the value
我有以下来源XML:
<ITEMS>
<ITEM>
<CODE>34155</CODE>
<VARIANTS>
<NAME>A</NAME>
<STOCK>12</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>B</NAME>
<STOCK>0</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>C</NAME>
<STOCK>50</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>D</NAME>
<STOCK>3</STOCK>
</VARIANTS>
</ITEM>
</ITEMS>
我想遍历所有 <VARIANTS>
个元素计数 <STOCK>
个子值并在父元素 <ITEM>
.
下创建新的 <TOTALSTOCK>
值
<ITEMS>
<ITEM>
<TOTALSTOCK>65</TOTALSTOCK>
<CODE>34155</CODE>
<VARIANTS>
<NAME>A</NAME>
<STOCK>12</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>B</NAME>
<STOCK>0</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>C</NAME>
<STOCK>50</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>D</NAME>
<STOCK>3</STOCK>
</VARIANTS>
</ITEM>
</ITEMS>
XSLT 可以进行这样的数学运算吗?
请尝试以下 XSLT。
输入XML
<ITEMS>
<ITEM>
<CODE>34155</CODE>
<VARIANTS>
<NAME>A</NAME>
<STOCK>12</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>B</NAME>
<STOCK>0</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>C</NAME>
<STOCK>50</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>D</NAME>
<STOCK>3</STOCK>
</VARIANTS>
</ITEM>
<ITEM>
<CODE>34770</CODE>
<VARIANTS>
<NAME>A</NAME>
<STOCK>120</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>C</NAME>
<STOCK>180</STOCK>
</VARIANTS>
</ITEM>
</ITEMS>
XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/ITEMS">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="ITEM">
<xsl:copy>
<TOTALSTOCK>
<xsl:value-of select="sum(./VARIANTS/STOCK)"/>
</TOTALSTOCK>
<xsl:copy-of select="*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
输出XML
<ITEMS>
<ITEM>
<TOTALSTOCK>65</TOTALSTOCK>
<CODE>34155</CODE>
<VARIANTS>
<NAME>A</NAME>
<STOCK>12</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>B</NAME>
<STOCK>0</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>C</NAME>
<STOCK>50</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>D</NAME>
<STOCK>3</STOCK>
</VARIANTS>
</ITEM>
<ITEM>
<TOTALSTOCK>300</TOTALSTOCK>
<CODE>34770</CODE>
<VARIANTS>
<NAME>A</NAME>
<STOCK>120</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>C</NAME>
<STOCK>180</STOCK>
</VARIANTS>
</ITEM>
</ITEMS>
不需要“遍历所有 <VARIANTS>
元素”。你可以简单地做:
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:template match="/ITEMS">
<xsl:copy>
<xsl:for-each select="ITEM">
<xsl:copy>
<TOTALSTOCK>
<xsl:value-of select="sum(VARIANTS/STOCK)"/>
</TOTALSTOCK>
<xsl:copy-of select="*"/>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我有以下来源XML:
<ITEMS>
<ITEM>
<CODE>34155</CODE>
<VARIANTS>
<NAME>A</NAME>
<STOCK>12</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>B</NAME>
<STOCK>0</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>C</NAME>
<STOCK>50</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>D</NAME>
<STOCK>3</STOCK>
</VARIANTS>
</ITEM>
</ITEMS>
我想遍历所有 <VARIANTS>
个元素计数 <STOCK>
个子值并在父元素 <ITEM>
.
<TOTALSTOCK>
值
<ITEMS>
<ITEM>
<TOTALSTOCK>65</TOTALSTOCK>
<CODE>34155</CODE>
<VARIANTS>
<NAME>A</NAME>
<STOCK>12</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>B</NAME>
<STOCK>0</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>C</NAME>
<STOCK>50</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>D</NAME>
<STOCK>3</STOCK>
</VARIANTS>
</ITEM>
</ITEMS>
XSLT 可以进行这样的数学运算吗?
请尝试以下 XSLT。
输入XML
<ITEMS>
<ITEM>
<CODE>34155</CODE>
<VARIANTS>
<NAME>A</NAME>
<STOCK>12</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>B</NAME>
<STOCK>0</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>C</NAME>
<STOCK>50</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>D</NAME>
<STOCK>3</STOCK>
</VARIANTS>
</ITEM>
<ITEM>
<CODE>34770</CODE>
<VARIANTS>
<NAME>A</NAME>
<STOCK>120</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>C</NAME>
<STOCK>180</STOCK>
</VARIANTS>
</ITEM>
</ITEMS>
XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/ITEMS">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="ITEM">
<xsl:copy>
<TOTALSTOCK>
<xsl:value-of select="sum(./VARIANTS/STOCK)"/>
</TOTALSTOCK>
<xsl:copy-of select="*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
输出XML
<ITEMS>
<ITEM>
<TOTALSTOCK>65</TOTALSTOCK>
<CODE>34155</CODE>
<VARIANTS>
<NAME>A</NAME>
<STOCK>12</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>B</NAME>
<STOCK>0</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>C</NAME>
<STOCK>50</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>D</NAME>
<STOCK>3</STOCK>
</VARIANTS>
</ITEM>
<ITEM>
<TOTALSTOCK>300</TOTALSTOCK>
<CODE>34770</CODE>
<VARIANTS>
<NAME>A</NAME>
<STOCK>120</STOCK>
</VARIANTS>
<VARIANTS>
<NAME>C</NAME>
<STOCK>180</STOCK>
</VARIANTS>
</ITEM>
</ITEMS>
不需要“遍历所有 <VARIANTS>
元素”。你可以简单地做:
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:template match="/ITEMS">
<xsl:copy>
<xsl:for-each select="ITEM">
<xsl:copy>
<TOTALSTOCK>
<xsl:value-of select="sum(VARIANTS/STOCK)"/>
</TOTALSTOCK>
<xsl:copy-of select="*"/>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>