首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在xsl:apply-模板中使用变量作为值?

如何在xsl:apply-模板中使用变量作为值?
EN

Stack Overflow用户
提问于 2020-11-03 23:00:33
回答 1查看 262关注 0票数 0

我试图从xml文件中提取一些数据,并根据特定的节点将其传递给许多html文件。我的source.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8" ?>
<products>
    <product>
        <id>1</id>
        <feature>Product description escaped html tags</feature>
    </product>
    <product>
        <id>2</id>
        <feature>Product description escaped html tags</feature>
    </product>
.........................
    <product>
        <id>5</id>
        <feature>Product description escaped html tags</feature>
    </product>
</products>

预期结果:具有以下内容的多个html文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<p>1</p>
Product description with html tags

我正在使用这个python代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import lxml.etree as ET

doc = ET.parse('source.xml')
xslt = ET.parse('modify.xsl')
transform = ET.XSLT(xslt)

products = doc.findall('product')

for product in products:
    i = product.find('id')
    n = ET.XSLT.strparam(str(i))
    describ = transform(doc, item_num=n)
    f = open('file_nr_{}.html'.format(i.text), 'wb')
    f.write(describ)
    f.close()

我当前的样式表modify.xsl

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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" indent="yes" encoding="UTF-8" />

    <xsl:param name="item_num"/>

    <xsl:template match="/products">
        <xsl:apply-templates select="product[id=$item_num]" />
    </xsl:template>

    <xsl:template match="id" >
        <p><xsl:value-of select="."/></p>
        <xsl:value-of select="following-sibling::feature" disable-output-escaping="yes"/>
    </xsl:template>
  </xsl:stylesheet>

..gives me多个完整的空零字节文件。但当我换行时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<xsl:apply-templates select="product[id=$item_num]" />

对此:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<xsl:apply-templates select="product[id&lt;4]" />

它给了我五个内容相同的文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<p>1</p>Product description with still escaped html tags
Product description with still escaped html tags

<p>2</p>Product description with still escaped html tags
Product description with still escaped html tags

<p>3</p>Product description with still escaped html tags
Product description with still escaped html tags

我不知道如何:

  • 在路径匹配中正确使用变量,只有一个具有特定<product><id>
  • 有效失能逃逸
  • 让谷歌找到解决方案..。;)

我尝试了,并搜索了这里,但我不能在我的案例中使用这些知识。可能是因为我仍然不明白传递变量值是如何工作的。从周五开始,我一直在独自解决这个问题,但我唯一的结果就是头痛。请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-03 23:36:01

你的尝试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<xsl:template match="/products">
    <xsl:apply-templates select="product[id=$item_num]" />
</xsl:template>

<xsl:template match="id" >
    <p><xsl:value-of select="."/></p>
    <xsl:value-of select="following-sibling::feature" disable-output-escaping="yes"/>
</xsl:template>

将模板应用于<product>节点,但具有<id>节点的模板。

<product>节点创建一个模板。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<xsl:template match="product">
    <p><xsl:value-of select="id"/></p>
    <xsl:value-of select="feature" disable-output-escaping="yes" />
</xsl:template>

每当XSLT找不到特定节点的模板时,它就会回到默认行为。默认行为是“复制子文本节点以输出,并将模板应用于子元素”。这就解释了为什么您看到了代码所看到的内容。

关于另一个问题:.find('...')返回XML节点,而不是字符串值,即.find('id')查找<id>元素。您希望将查找节点的.text作为XSLT参数传递,而不是节点本身:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import lxml.etree as ET

doc = ET.parse('source.xml')
xslt = ET.parse('modify.xsl')
transform = ET.XSLT(xslt)

products = doc.findall('product')

for product in products:
    i = product.find('id').text
    describ = transform(doc, item_num=i)
    with open(f'file_nr_{i}.html', 'wb') as f:
        f.write(describ)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64675440

复制
相关文章
Django模板引擎中变量作为属性值调用
作者:matrix 被围观: 2,268 次 发布时间:2019-05-16 分类:Python 零零星星 | 4 条评论 »
HHTjim 部落格
2022/09/26
1.6K0
Django模板引擎中变量作为属性值调用
XSL、XSLT
(图片来自:https://www.w3school.com.cn/xsl/xsl_for_each.asp)
问问计算机
2021/05/08
1.8K0
XSL、XSLT
Golang 中函数作为值与类型
在 Go 语言中,我们可以把函数作为一种变量,用 type 去定义它,那么这个函数类型就可以作为值传递,甚至可以实现方法,这一特性是在太灵活了,有时候我们甚至可以利用这一特性进行类型转换。作为值传递的条件是类型具有相同的参数以及相同的返回值。
张乘辉
2019/06/14
1.7K0
XSL
  1、<xsl:import>、<xsl:include>、<xsl:apply-imports>元素   <xsl:import>与<xsl:include>相比,两者都须是<xsl:stylesheet>的子结点,但前者定义的模板规则优先级比较低,且必须为第一个子结点。两者的功能是相同的,都是将另一个定义好的XSL文件装入到当前XSL文件中来。   装来的模板规则,由<xsl:apply-imports>指定何时何地使用。   它们的语法分别是:
全栈程序员站长
2022/07/04
1.1K0
wps文档xsl函数使用问题
打开开发工具,wps默认的编程语言是java script,可以切换到vbs 添加如下代码
sofu456
2023/07/25
1920
XSL教程(1)
一个示例: 1.xml: <?xml version=”1.0″?> <?xml-stylesheet type=”text/xsl” href=”cd_catalog.xsl”?>
全栈程序员站长
2022/06/30
3110
如何在CSS中使用变量
原文链接:https://www.sitepoint.com/how-to-use-variables-in-css/[1]
chuckQu
2022/09/20
2.9K0
如何在CSS中使用变量
如何在CSS中使用变量
原文链接:https://www.sitepoint.com/how-to-use-variables-in-css/[1]
winty
2022/11/07
2.5K0
如何在CSS中使用变量
Python使用tensorflow中梯度下降算法求解变量最优值
TensorFlow是一个用于人工智能的开源神器,是一个采用数据流图(data flow graphs)用于数值计算的开源软件库。数据流图使用节点(nodes)和边线(edges)的有向图来描述数学计算,图中的节点表示数学操作,也可以表示数据输入的起点或者数据输出的终点,而边线表示在节点之间的输入/输出关系,用来运输大小可动态调整的多维数据数组,也就是张量(tensor)。TensorFlow可以在普通计算机、服务器和移动设备的CPU和GPU上展开计算,具有很强的可移植性,并且支持C++、Python等多种
Python小屋屋主
2018/04/16
1.3K0
smarty 模板中定义变量的方法
{assign var="i" value=0} {foreach name=simple_tab from=$zhinan_cate key=key item=item} {if $i} <small>|</small> {/if} {if $item['count']} {math assign="i" equation="x + y" x=$i y=1} <span><a title="{$segment_parent}期{$it
零式的天空
2022/03/02
1.7K0
Qmake模板变量
Qmake的TEMPLATE变量用来设置Qt项目的构建类型。 TEMPLATE变量一般支持以下类型: TEMPLATE变量 作用 app 生成应用(默认) lib 生成项目库 subdirs 生成子项目 vcapp 生成VS项目应用 vclib 生成VS项目库 vsubdirs 生成VS子项目
Qt君
2019/07/15
5470
c++中引用作为返回值
引用的意义: 引用可以看作某个变量的“别名”,作为某个变量的别名而存在,因此在一些场合可以代替指针。 引用相对于指针来说具有更好的可读性和实用性,能起到指针的部分作用,但是比指针安全。 引用在c++里面可以说是一把利器,引用用的好的话可以写出非常精妙的程序。 引用的本质: 引用在C++中的内部实现是一个常指针。 Type& name çè Type* const name C++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同。 从使用的角度,引用会让人误会其只是一个别
混说Linux
2022/07/14
6680
webstorm 模板变量
${PROJECT_NAME} - the name of the current project.
onety码生
2018/11/21
1.1K0
XML,XSL,DTD,SCHEMA
XML:(extend mark language)可扩展标记语言,主要是用来进行数据交换的。是一种简单的数据存储语言。它和HTML的区别就是XML重视数据本身,而HTML重视的是显示。我个人觉得XML之所以重要是因为它的具有很强的跨平台性,跨语言性,这意味着我在任何地方都可以使用它,而不用担心环境问题。
the5fire
2019/02/28
8390
Django 模板HTML中 变量 过滤器 标签 的使用方法
一、变量 1.变量的形式是:{{variable}}, 当模板引擎碰到变量的时候,引擎使用变量的值代替变量。 2.使用dot(.)能够访问变量的属性 3.当模板引擎碰到dot的时候,查找的顺序是什么样子呢? a.字典查找,例如:foo[“var1”] b.属性查找,例如:foo.bar c.方法查找,例如:foo.bar() d.list-index查找,例如foo[bar]
学到老
2019/01/25
4K0
JS中函数作为参数和返回值 15
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> /*let say=function() { console.log("hello world"); } say(); let fn=say; fn(); // 将函数作为其他函数的参数 function test(fn) { /
贵哥的编程之路
2020/10/28
4.7K0
flutter - 如何在 dart/flutter 中收听流值
如果流不是广播流,则您只能收听一次。 请参阅此 Medium post 以了解有关 Streams 的更多信息。 收听 stream 时,您需要在 _assetsAudioPlayer.currentPosition 函数中添加您的代码。
徐建国
2021/08/30
1.1K0
JavaScript两个变量交换值(不使用临时变量)
本文主要描述,如何不使用中间值,将两个变量的值进行交换。  前三种只适用于number类型的数值交换,第四和第五种适合其他类型。
我是leon
2019/08/28
1.6K0
外部数据插值到fluent变量中
3.19.2. Format of the Interpolation File
周星星9527
2020/11/19
2.2K0
外部数据插值到fluent变量中
点击加载更多

相似问题

在XSL :apply-模板中使用xsl变量作为Xpath值

11

xsl:apply-模板正确放置

10

xsl:template /xsl:apply-模板移除子节点

11

xsl apply-转换后递归地使用模板

13

xsl:apply-模板中的select属性

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文