Xml 用xslt转换嵌套的子节点
XML数据文件Xml 用xslt转换嵌套的子节点,xml,xslt,xpath,Xml,Xslt,Xpath,XML数据文件 <?xml version="1.0" encoding="utf-8"?> <page> <tab dim="70"> <tab dim="50"> alpha </tab> <tab dim="50"> alpha </tab> </tab> <ta
<?xml version="1.0" encoding="utf-8"?>
<page>
<tab dim="70">
<tab dim="50">
alpha
</tab>
<tab dim="50">
alpha
</tab>
</tab>
<tab dim="30">
gama
</tab>
</page>
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0"
encoding="iso-8859-1" indent="yes"/>
<xsl:template match="/">
<xsl:text disable-output-escaping='yes'><!DOCTYPE html></xsl:text>
<html>
<head>
<title>Title</title>
<link type="text/css" href="/css/framework.css" rel="stylesheet"/>
</head>
<body>
<div id="page-base">
<xsl:for-each select="//tab">
<div class="wrapper tab">
<xsl:attribute name="style">
width:<xsl:value-of select="@dim" />%;
min-width:<xsl:value-of select="@dim" />%;
max-width:<xsl:value-of select="@dim" />%;
</xsl:attribute>
<xsl:value-of select="." />
</div>
</xsl:for-each>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
阿尔法
阿尔法
伽马
XSLT文件
<?xml version="1.0" encoding="utf-8"?>
<page>
<tab dim="70">
<tab dim="50">
alpha
</tab>
<tab dim="50">
alpha
</tab>
</tab>
<tab dim="30">
gama
</tab>
</page>
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0"
encoding="iso-8859-1" indent="yes"/>
<xsl:template match="/">
<xsl:text disable-output-escaping='yes'><!DOCTYPE html></xsl:text>
<html>
<head>
<title>Title</title>
<link type="text/css" href="/css/framework.css" rel="stylesheet"/>
</head>
<body>
<div id="page-base">
<xsl:for-each select="//tab">
<div class="wrapper tab">
<xsl:attribute name="style">
width:<xsl:value-of select="@dim" />%;
min-width:<xsl:value-of select="@dim" />%;
max-width:<xsl:value-of select="@dim" />%;
</xsl:attribute>
<xsl:value-of select="." />
</div>
</xsl:for-each>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
!DOCTYPE html
标题
宽度:%;
最小宽度:%;
最大宽度:%;
输出
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
<link rel="stylesheet" href="/css/framework.css" type="text/css">
</head>
<body>
<div id="page-base">
<div class="wrapper tab" style=" width:70%; min-width:70%; max-width:70%; ">
alpha alpha
</div>
<div class="wrapper tab" style=" width:50%; min-width:50%; max-width:50%; "> alpha </div>
<div class="wrapper tab" style=" width:50%; min-width:50%; max-width:50%; "> alpha </div>
<div class="wrapper tab" style=" width:30%; min-width:30%; max-width:30%; "> gama </div>
</div>
</body>
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
<link rel="stylesheet" href="/css/framework.css" type="text/css">
</head>
<body>
<div id="page-base">
<div class="wrapper tab" style=" width:70%; min-width:70%; max-width:70%; ">
<div class="wrapper tab" style=" width:50%; min-width:50%; max-width:50%; "> alpha </div>
<div class="wrapper tab" style=" width:50%; min-width:50%; max-width:50%; "> alpha </div>
</div>
<div class="wrapper tab" style=" width:30%; min-width:30%; max-width:30%; "> gama </div>
</div>
</body>
</html>
标题
阿尔法
阿尔法
阿尔法
伽马
所需输出
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
<link rel="stylesheet" href="/css/framework.css" type="text/css">
</head>
<body>
<div id="page-base">
<div class="wrapper tab" style=" width:70%; min-width:70%; max-width:70%; ">
alpha alpha
</div>
<div class="wrapper tab" style=" width:50%; min-width:50%; max-width:50%; "> alpha </div>
<div class="wrapper tab" style=" width:50%; min-width:50%; max-width:50%; "> alpha </div>
<div class="wrapper tab" style=" width:30%; min-width:30%; max-width:30%; "> gama </div>
</div>
</body>
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
<link rel="stylesheet" href="/css/framework.css" type="text/css">
</head>
<body>
<div id="page-base">
<div class="wrapper tab" style=" width:70%; min-width:70%; max-width:70%; ">
<div class="wrapper tab" style=" width:50%; min-width:50%; max-width:50%; "> alpha </div>
<div class="wrapper tab" style=" width:50%; min-width:50%; max-width:50%; "> alpha </div>
</div>
<div class="wrapper tab" style=" width:30%; min-width:30%; max-width:30%; "> gama </div>
</div>
</body>
</html>
标题
阿尔法
阿尔法
伽马
关键是根本不要使用
。改用模板匹配
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="/">
<html>
<head>
<title>Title</title>
<link type="text/css" href="/css/framework.css" rel="stylesheet"/>
</head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="page">
<div id="page-base">
<xsl:apply-templates />
</div>
</xsl:template>
<xsl:template match="tab">
<div class="wrapper tab" style="width:{@dim}%; min-width:{@dim}%; max-width:{@dim}%;">
<xsl:apply-templates />
</div>
</xsl:template>
</xsl:stylesheet>
标题
结果:(另见)
标题
阿尔法
阿尔法
伽马
要消除输出中的空白,只需添加另一个模板:
<xsl:template match="tab/text()">
<xsl:value-of select="normalize-space()" />
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="node/to/match" />
在某些特定情况下,
是正确的选择。这不是其中之一
每当你想使用
时,你应该停下来思考。在绝大多数情况下,
是您真正想要的
只有当您找到了反对
的令人信服的理由时,才使用
。如果你想不出一个这样的理由,那么可能没有
要输出显示在输入中的节点而不更改它们,请添加标识模板:
<xsl:template match="tab/text()">
<xsl:value-of select="normalize-space()" />
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="node/to/match" />
要禁用输出中不需要的节点,请添加空模板:
<xsl:template match="tab/text()">
<xsl:value-of select="normalize-space()" />
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="node/to/match" />
如果选项卡
或列
节点有其他HTML元素,这些元素没有任何模板,但希望保留并按原样打印,该怎么办?@user1538127在这种情况下,您只需添加标识模板。这将复制与更具体的模板不匹配的每个节点。参见修改后的答案。@*|node()
是什么意思?您能解释一下或/并将我链接到一个引用吗?@user1538127它匹配所有类型的XML节点。在谷歌上快速搜索“身份模板”会给你很多阅读机会。