我正在尝试将这段xml格式化为所需的输出。
输入xml:
<Damage>
<MachineryItems>
<MachineryItemDisplayBean>
<itemNumber>1</itemNumber>
<additionalCoverBasis>MD</additionalCoverBasis>
</MachineryItemDisplayBean>
<MachineryItemDisplayBean>
<itemNumber>2</itemNumber>
<additionalCoverBasis>MP</additionalCoverBasis>
</MachineryItemDisplayBean>
<MachineryItemDisplayBean>
<itemNumber>3</itemNumber>
<additionalCoverBasis>MC</additionalCoverBasis>
</MachineryItemDisplayBean>
</MachineryItems>
</Damage>
这是需要进行格式化的xml:
<MachineryItemDisplayBean>
下有多个<MachineryItems>
。
如果<MachineryItemDisplayBean>
中的任何一个具有<additionalcoverbasis>
下的值MP,那么如果<MachineryItemDisplayBean>
中没有<additionalcoverbasis>
具有Y
下的值MP,那么Y需要打印打印
上一个输入xml的输出应为:
<xsl:template match="Damage/MachineryItems">
<xsl:param name="DMFlag" select="'N'">
<xsl:for-each select="MachineryItemDisplayBean">
<xsl:if test="MachineryItemDisplayBean/additionalCoverBasis = 'MP'">
<xsl:value-of select="'Y'"/>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="$DMFlag"/>
</xsl:param>
</xsl:template>
使用XSL:
if ($result->num_rows > 0) {
$myTable = "<table><tr><th>ID</th><th>Name</th></tr>";
// output data of each row
while($row = $result->fetch_assoc()) {
$myTable .= "<tr><td>" . $row["id"]. "</td><td>" . $row["firstname"]. " " . $row["lastname"]. "</td></tr>";
}
$myTable .= "</table>";
} else {
echo "0 results";
}
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
如果
<MachineryItemDisplayBean>
中的任何一个具有值MP 在<additionalcoverbasis>
下,如果没有,则需要在其他地方打印<MachineryItemDisplayBean>
具有值MP 在<additionalcoverbasis>
下,需要打印N
我相信转换为:
<xsl:template match="/">
<xsl:choose>
<xsl:when test="Damage/MachineryItems/MachineryItemDisplayBean/additionalCoverBasis[.='MP']">Y</xsl:when>
<xsl:otherwise>N</xsl:otherwise>
</xsl:choose>
</xsl:template>
答案 1 :(得分:0)
样式表有什么问题:
xsl:param
或xsl:variable
无效(XSLT库甚至可以避免对其进行评估)Y
元素创建N
或MachineryItemDisplayBean
,最后您将获得NYN
实现您需要的几种方法:
解决方案1:两个模板,只有一个匹配
<xsl:template match="Damage[MachineryItems/MachineryItemDisplayBean/additionalCoverBasis = 'MP']">
Y
</xsl:template>
<xsl:template match="Damage[not(MachineryItems/MachineryItemDisplayBean/additionalCoverBasis = 'MP')]">
N
</xsl:template>
解决方案2:单个模板
<xsl:template match="Damage">
<xsl:choose>
<xsl:when test="MachineryItems/MachineryItemDisplayBean/additionalCoverBasis = 'MP'">
Y
</xsl:when>
<xsl:otherwise>
N
</xsl:otherwise>
</xsl:choose>
</xsl:template>