XSLT 无法让条件指向 xslt 中的属性值
XSLT Can't get conditionals to point to attribute values in xslt
我有一个 xml 事件列表。我必须使用 xsl 格式化文档,使免费的 (@GRATUITO = 1) 显示在 html 输出的右侧,而有价格的显示在左侧。经过 2 天的研究,这就是我设法拼凑起来的东西,但肯定还缺少一些东西,我发现自己迷失在混合信息的海洋中。
我应该使用模板而不是“for-each”循环吗?是不是条件运算符错了?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding='UTF-8'/>
<xsl:template match="/">
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css"/>
<title>eventos</title>
</head>
<body>
<div class ="head">
<h1>
<xsl:value-of select="Contenidos/infoDataset/nombre"/>
</h1>
</div>
<div class = "mainbox">
<xsl:for-each select = "contenido/atributos">
<xsl:if test="atributo/@GRATUITO > 0">
<div class = "floatright">
<p>
<xsl:value-of select="atributo/@TITULO"/>
</p>
</div>
</xsl:if>
<xsl:if test="atributo/@GRATUITO < 1">
<div class = "floatleft">
<p>
<xsl:value-of select="atributo/@TITULO"/>
</p>
</div>
</xsl:if>
</xsl:for-each>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XML
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="eventos.xsl"?>
<Contenidos>
<infoDataset>
<nombre>Actividades Culturales y de Ocio Municipal en los próximos 100 días</nombre>
<id>206974-0</id>
<uri>x</uri>
<descripcion> x </descripcion>
</infoDataset>
<contenido>
<tipo>Evento</tipo>
<atributos idioma="es">
<atributo nombre="ID-EVENTO">10056485</atributo>
<atributo nombre="TITULO">Actividades de reciclaje y propuesta de mobiliario participativo</atributo>
<atributo nombre="GRATUITO">1</atributo>
</atributo>
</atributos>
</contenido>
<contenido>
<contenido>
<tipo>Evento</tipo>
<atributos idioma="es">
<atributo nombre="ID-EVENTO">10046954</atributo>
<atributo nombre="TITULO">Burlas, chanzas y donaires</atributo>
<atributo nombre="PRECIO"><![CDATA[2 euros]]></atributo>
<atributo nombre="GRATUITO">0</atributo>
</atributo>
</atributos>
</contenido>
</Contenidos>
您正在尝试访问节点的值,就好像它是属性的值一样:
<xsl:if test="atributo/@GRATUITO > 0">
您正在尝试测试不存在的属性 GRATUITO
的值,因为属性名为 nombre
。
<atributo nombre="GRATUITO">0</atributo>
尝试使用这个结构:
<xsl:if test="atributo[@nombre='GRATUITO'] > 0">
您没有 post 预期的结果,您的来源 XML 有语法错误。
我猜你想做这样的事情:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding='UTF-8'/>
<xsl:template match="/Contenidos">
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css"/>
<title>eventos</title>
</head>
<body>
<div class ="head">
<h1>
<xsl:value-of select="infoDataset/nombre"/>
</h1>
</div>
<div class = "mainbox">
<div class = "floatright">
<xsl:for-each select = "contenido[atributos/atributo[@nombre='GRATUITO'] = 1]">
<p>
<xsl:value-of select="atributos/atributo[@nombre='TITULO']"/>
</p>
</xsl:for-each>
</div>
<div class = "floatleft">
<xsl:for-each select = "contenido[atributos/atributo[@nombre='GRATUITO'] = 0]">
<p>
<xsl:value-of select="atributos/atributo[@nombre='TITULO']"/>
</p>
</xsl:for-each>
</div>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
给定一个 well-formed XML 输入,例如:
<Contenidos>
<infoDataset>
<nombre>Actividades Culturales y de Ocio Municipal en los próximos 100 días</nombre>
<id>206974-0</id>
<uri>x</uri>
<descripcion> x </descripcion>
</infoDataset>
<contenido>
<tipo>Evento</tipo>
<atributos idioma="es">
<atributo nombre="ID-EVENTO">10056485</atributo>
<atributo nombre="TITULO">Actividades de reciclaje y propuesta de mobiliario participativo</atributo>
<atributo nombre="GRATUITO">1</atributo>
</atributos>
</contenido>
<contenido>
<tipo>Evento</tipo>
<atributos idioma="es">
<atributo nombre="ID-EVENTO">10046954</atributo>
<atributo nombre="TITULO">Burlas, chanzas y donaires</atributo>
<atributo nombre="PRECIO"><![CDATA[2 euros]]></atributo>
<atributo nombre="GRATUITO">0</atributo>
</atributos>
</contenido>
</Contenidos>
这将产生:
结果
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="style.css">
<title>eventos</title>
</head>
<body>
<div class="head">
<h1>Actividades Culturales y de Ocio Municipal en los próximos 100 días</h1>
</div>
<div class="mainbox">
<div class="floatright">
<p>Actividades de reciclaje y propuesta de mobiliario participativo</p>
</div>
<div class="floatleft">
<p>Burlas, chanzas y donaires</p>
</div>
</div>
</body>
</html>
注意使用 predicates 而不是 xsl:if
。
我有一个 xml 事件列表。我必须使用 xsl 格式化文档,使免费的 (@GRATUITO = 1) 显示在 html 输出的右侧,而有价格的显示在左侧。经过 2 天的研究,这就是我设法拼凑起来的东西,但肯定还缺少一些东西,我发现自己迷失在混合信息的海洋中。
我应该使用模板而不是“for-each”循环吗?是不是条件运算符错了?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding='UTF-8'/>
<xsl:template match="/">
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css"/>
<title>eventos</title>
</head>
<body>
<div class ="head">
<h1>
<xsl:value-of select="Contenidos/infoDataset/nombre"/>
</h1>
</div>
<div class = "mainbox">
<xsl:for-each select = "contenido/atributos">
<xsl:if test="atributo/@GRATUITO > 0">
<div class = "floatright">
<p>
<xsl:value-of select="atributo/@TITULO"/>
</p>
</div>
</xsl:if>
<xsl:if test="atributo/@GRATUITO < 1">
<div class = "floatleft">
<p>
<xsl:value-of select="atributo/@TITULO"/>
</p>
</div>
</xsl:if>
</xsl:for-each>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XML
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="eventos.xsl"?>
<Contenidos>
<infoDataset>
<nombre>Actividades Culturales y de Ocio Municipal en los próximos 100 días</nombre>
<id>206974-0</id>
<uri>x</uri>
<descripcion> x </descripcion>
</infoDataset>
<contenido>
<tipo>Evento</tipo>
<atributos idioma="es">
<atributo nombre="ID-EVENTO">10056485</atributo>
<atributo nombre="TITULO">Actividades de reciclaje y propuesta de mobiliario participativo</atributo>
<atributo nombre="GRATUITO">1</atributo>
</atributo>
</atributos>
</contenido>
<contenido>
<contenido>
<tipo>Evento</tipo>
<atributos idioma="es">
<atributo nombre="ID-EVENTO">10046954</atributo>
<atributo nombre="TITULO">Burlas, chanzas y donaires</atributo>
<atributo nombre="PRECIO"><![CDATA[2 euros]]></atributo>
<atributo nombre="GRATUITO">0</atributo>
</atributo>
</atributos>
</contenido>
</Contenidos>
您正在尝试访问节点的值,就好像它是属性的值一样:
<xsl:if test="atributo/@GRATUITO > 0">
您正在尝试测试不存在的属性 GRATUITO
的值,因为属性名为 nombre
。
<atributo nombre="GRATUITO">0</atributo>
尝试使用这个结构:
<xsl:if test="atributo[@nombre='GRATUITO'] > 0">
您没有 post 预期的结果,您的来源 XML 有语法错误。
我猜你想做这样的事情:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding='UTF-8'/>
<xsl:template match="/Contenidos">
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css"/>
<title>eventos</title>
</head>
<body>
<div class ="head">
<h1>
<xsl:value-of select="infoDataset/nombre"/>
</h1>
</div>
<div class = "mainbox">
<div class = "floatright">
<xsl:for-each select = "contenido[atributos/atributo[@nombre='GRATUITO'] = 1]">
<p>
<xsl:value-of select="atributos/atributo[@nombre='TITULO']"/>
</p>
</xsl:for-each>
</div>
<div class = "floatleft">
<xsl:for-each select = "contenido[atributos/atributo[@nombre='GRATUITO'] = 0]">
<p>
<xsl:value-of select="atributos/atributo[@nombre='TITULO']"/>
</p>
</xsl:for-each>
</div>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
给定一个 well-formed XML 输入,例如:
<Contenidos>
<infoDataset>
<nombre>Actividades Culturales y de Ocio Municipal en los próximos 100 días</nombre>
<id>206974-0</id>
<uri>x</uri>
<descripcion> x </descripcion>
</infoDataset>
<contenido>
<tipo>Evento</tipo>
<atributos idioma="es">
<atributo nombre="ID-EVENTO">10056485</atributo>
<atributo nombre="TITULO">Actividades de reciclaje y propuesta de mobiliario participativo</atributo>
<atributo nombre="GRATUITO">1</atributo>
</atributos>
</contenido>
<contenido>
<tipo>Evento</tipo>
<atributos idioma="es">
<atributo nombre="ID-EVENTO">10046954</atributo>
<atributo nombre="TITULO">Burlas, chanzas y donaires</atributo>
<atributo nombre="PRECIO"><![CDATA[2 euros]]></atributo>
<atributo nombre="GRATUITO">0</atributo>
</atributos>
</contenido>
</Contenidos>
这将产生:
结果
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="style.css">
<title>eventos</title>
</head>
<body>
<div class="head">
<h1>Actividades Culturales y de Ocio Municipal en los próximos 100 días</h1>
</div>
<div class="mainbox">
<div class="floatright">
<p>Actividades de reciclaje y propuesta de mobiliario participativo</p>
</div>
<div class="floatleft">
<p>Burlas, chanzas y donaires</p>
</div>
</div>
</body>
</html>
注意使用 predicates 而不是 xsl:if
。