我正在尝试对输入xml文件进行条件检查并放置值。
输入 XML:
<workorder>
<newwo>1</newwo>
</workorder>
如果 newwo 是 1,那么我必须在我的输出中设置为"NEW",否则设置为"OLD"
预期输出为:
newwo: "NEW"
我的 XSLT 是:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
<xsl:template match="/">
<xsl:apply-templates select="NEWWO" />
</xsl:template>
<xsl:template match="/NEWWO">
<xsl:text>{
newwo:"
</xsl:text>
<xsl:choose>
<xsl:when test="NEWWO != '0'">NEW</xsl:when>
<xsl:otherwise>OLD</xsl:otherwise>
</xsl:choose>
<xsl:text>"
}</xsl:text>
</xsl:template>
请帮助我。提前感谢!
我看到你没有得到输出的原因有很多。
- xpath 区分大小写。
NEWWO
不会与newwo
相匹配. - 您匹配
/
然后将模板应用于newwo
(大小写已修复),但newwo
在该上下文中不存在。您必须在应用模板中添加*/
或workorder/
(如select="*/newwo"
),或者将/
更改为/*
或/workorder
。 - 您匹配
/newwo
(再次修复大小写),但newwo
不是根元素。删除/
。 - 您执行以下测试:
test="newwo != '0'"
,但newwo
已经是当前上下文。请改用.
或normalize-space()
。(如果使用normalize-space()
,请务必针对字符串进行测试。(引用1
。
下面是一个更新的示例。
XML 输入
<workorder>
<newwo>1</newwo>
</workorder>
XSLT 1.0
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:apply-templates select="newwo" />
</xsl:template>
<xsl:template match="newwo">
<xsl:text>{
newwo: "</xsl:text>
<xsl:choose>
<xsl:when test=".=1">NEW</xsl:when>
<xsl:otherwise>OLD</xsl:otherwise>
</xsl:choose>
<xsl:text>"
}</xsl:text>
</xsl:template>
</xsl:stylesheet>
输出
{
newwo: "NEW"
}
你试试下面
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0">
<xsl:template match="/">
<xsl:choose>
<xsl:when test="/workorder/newwo = 1">
<xsl:text disable-output-escaping="no"> newwo:New</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text disable-output-escaping="no"> newwo:Old</xsl:text> </xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>