首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从clojure中的嵌套XML中只过滤一些值?

从clojure中的嵌套XML中只过滤一些值的方法有多种。以下是一种常见的方式:

  1. 使用clojure.xml库加载XML数据:
代码语言:txt
复制
(require '[clojure.xml :as xml])

(def xml-data
  "<root>
     <item>
       <name>Apple</name>
       <price>1.99</price>
     </item>
     <item>
       <name>Orange</name>
       <price>0.99</price>
     </item>
   </root>")

(def parsed-xml (xml/parse-str xml-data))
  1. 使用clojure.xml库中的xpath方法选择要过滤的节点:
代码语言:txt
复制
(require '[clojure.zip :as zip])

(defn filter-xml [xml]
  (let [z (zip/xml-zip xml)]
    (->> z
         (zip/xml-> :item)
         (filter #(= "Apple" (zip/xml1-> % :name zip/text)))
         (map zip/node)
         (xml/sexpr))))

在上面的代码中,我们使用zip/xml-zip创建了一个XML Zipper,并使用zip/xml->选择了<item>节点。然后使用zip/xml1->选择了每个<item>节点下的<name>节点,并使用zip/text获取其文本值。最后,我们使用filter函数过滤出<name>为"Apple"的节点,并使用map函数获取节点的子树,最终使用xml/sexpr将节点转换为clojure的数据结构。

  1. 运行过滤函数并输出结果:
代码语言:txt
复制
(println (filter-xml parsed-xml))

运行上述代码,将会过滤出<name>为"Apple"的节点及其子树,并打印输出结果。

请注意,以上代码中没有提及具体的腾讯云产品链接,因为从clojure中过滤XML不需要云计算平台的支持。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

实用:如何将aop中的pointcut值从配置文件中读取

背景 改造老项目,须要加一个aop来拦截所的web Controller请求做一些处理,由于老项目比较多,且包的命名也不统一,又不想每个项目都copy一份相同的代码,这样会导致后以后升级很麻烦,不利于维护...于是我们想做成一个统一的jar包来给各项目引用,这样每个项目只须要引用该jar,然后配置对应的切面值就可以了。...我们都知道,java中的注解里面的值都是一个常量, 如: @Pointcut("execution(* com.demo.Serviceable+.*(..))")...这种方式原则上是没有办法可以进行改变的。但是我们又要实现这将aop中的切面值做成一个动态配置的,每个项目的值的都不一样的,该怎么办呢?...这样,各项目只须要引用该jar,然后在配置文件中指定要拦截的pointcut就可以了。 ---- 大黄:本文主要为抛砖引玉,提供一个思路。

24K41
  • 从源码层面分析Mybatis中Dao接口和XML文件的SQL是如何关联的

    总结下: XML文件中的每一个SQL标签就对应一个MappedStatement对象,这里面有两个属性很重要。 id:全限定类名+方法名组成的ID。...Configuration对象就是Mybatis中的核心类,基本所有的配置信息都维护在这里。把所有的XML都解析完成之后,Configuration就包含了所有的SQL信息。...如果有小伙伴对动态代理不熟悉,可以先补充下这部分知识,下面的内容会更好理解一些。 思考一个问题:MapperProxy是什么时候创建的呢?...springboot中的用法,或者也可以使用xml配置的方式。...总结下,当我们调用到Dao接口的方法时,则会调用到MapperProxy对象的invoke方法,最终会通过接口的全路径名从Configuration这个大管家的某个map里找到MappedStatement

    2.1K20

    【译】深入 Roam 数据结构 —— 为什么 Roam 远不只是一个笔记应用

    类似地,段落将只列出嵌套在它下面的块(block),而不是嵌套在嵌套块下面的块。嵌套中最低层级的 Block 块(叶子)则没有 :block/children 属性。...Optional attributes: 可选属性: Roam 只会在你改变特定块的默认值时才会设置这些属性(只存在于数据库中的段落),例如,你将块的文本对齐方式从左对齐改为居中。...Predicates 断言 断言子句可以过滤结果集,只包括断言返回 true 的结果。在 Datalog 中,你可以使用任何 Clojure 函数或 Java 方法作为谓词函数。...除了clojure.core命名空间之外,Clojure 函数必须是完全命名空间限定的。遗憾的是,在核心命名空间之外,我只找到了几个在 Roam 中能用的函数。...需要注意的是,如果你只在 Graph 中使用 bullet,查询将只返回一个值:”bullet”。

    1.6K10

    Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?

    本文将详细解释一个聚合查询示例,该查询用于统计满足特定条件的文档数量,并计算其占总文档数量的百分比。这里回会分享如何统计某个字段的空值率,然后扩展介绍ES的一些基础知识。...以下是一些常见的聚合类型及其示例:指标聚合(Metric Aggregations)sum:计算数值字段的总和。avg:计算数值字段的平均值。min:查找数值字段的最小值。...filters:将文档分组为多个桶,每个桶对应一组过滤条件。...,如何嵌套聚合?...并相互引用,统计索引中某一个字段的空值率?语法是怎么样的

    22220

    几分钟内学习 Clojure

    Clojure 是JVM上的一个LISP语言变种,它比Common Lisp更强调纯函数式编程,但提供了一些STM工具以处理它所引入的状态问题。...中的Sring类型 (class false) ;布尔值对应着java中的Boolean类型 (class nil); null值被称为 nil(英语含义:无、零点) ; 如果你想创建一列数据字面值,...; 检索一个不存在的值会返回nil (stringmap "d") ; => nil ; 使用assoc 向一个map中添加新的键值对。...2 3} 4) ; => nil (没有就返回nil) ; clojure.sets 命名空间包含更多的函数 ; 一些有用的形式 ;;;;;;;;;;;;;;;;; ; clojure中的逻辑结构都是宏...;; ; java 拥有一个庞大的各种用途的标准库,你一定迫不及待想学习如何在clojure中使用这些库 ; 使用import类引入java模块(这个还好没变化) (import java.util.Date

    1.7K40

    Clojure 学习入门(18)—— 数据类型

    如何表示和处理数据 Clojure是一种动态类型语言,这意味着你在程序中永远不需要明确定义符号、函数、或者参数的数据类型。但是,所有的值仍然有一个类型。...如果你尝试执行一个类型不支持的操作,将会在运行时产生错误。写代码时避免这种事情,是程序员的责任。对于有动态语言背景的人来说是很自然的事情,而那些只使用静态语言的人需要一些转变。...基本类型 Clojure提供了一些基本类型来表示基本程序语言的类型结构,比如数字,字符串和布尔值。...除了实际布尔值false,计算结果为false的都是空值 nil。 常用布尔函数 Clojure提供了一些方便的布尔函数。 not not 函数(not) 接受一个参数。...列表 对Clojure来说列表十分重要,因为实际上Clojure程序本身就是由很多嵌套着的组成的。在最基本的层面上来讲,一个列表就是一些元素的有序集合。

    2.4K10

    程序员需要知道的8个Linux命令

    我在这里要讲的是这几个最常用的命令的最常见用法。如果你对linux命令并不是很了解,你想找一些这方面的资料学习,那这篇文章将会给你一个基本的指导。 让我们从处理一些数据开始。...对于一些小文件,你可以读取整个文件来处理它们,然而,真正的log文件通常有大量的内容,你不能不考虑这个情况。此时你应该考虑过滤出某些内容,把cat、sort后的内容通过管道传递给过滤工具。...但我们只关心Patterns of Enterprise Architecture这本书的信息,而且只关心数量和价格。我现在要做到是切除我们不关心的任何信息。...cut cut – 删除文件中字符行上的某些区域 又要使用grep,我们用grep过滤出我们想要的行。有了我们想要的行信息,我们就可以把它们切成小段,删除不需要的部分数据。...uniq uniq – 删除重复的行 下面的例子展示了如何过滤出跟书相关的交易,删除不需要的信息,获得一个不重复的信息。

    84050

    WPF备忘录(3)如何从 Datagrid 中获得单元格的内容与 使用值转换器进行绑定数据的转换IValueConverter

    一、如何从 Datagrid 中获得单元格的内容    DataGrid 属于一种 ItemsControl, 因此,它有 Items 属性并且用ItemContainer 封装它的 items. ...但是,WPF中的DataGrid 不同于Windows Forms中的 DataGridView。 ...== null) child = GetVisualChild(v); else break; } return child; }  二、WPF 使用值转换器进行绑定数据的转换...IValueConverter  有的时候,我们想让绑定的数据以其他的格式显示出来,或者转换成其他的类型,我们可以 使用值转换器来实现.比如我数据中保存了一个文件的路径”c:\abc\abc.exe”...FileInfo fi = new FileInfo((string)value); return fi.Name; } //ConvertBack方法将显示值转换成原来的格式

    5.6K70

    Java扩展Nginx之五:五大handler(系列最核心)

    content handler是最常用的handler,这是个location配置,定义了nginx收到某个请求后应该如何处理,前面的文章中已经用到了 现在咱们再写一个content handler,...鉴权不通过就在rewrite handler上返回401 (Unauthorized)或者403 (Forbidden) 从技术实现的角度来看,您说得没错,access handler来自nginx-clojure...; import nginx.clojure.java.ArrayMap; import nginx.clojure.java.NginxJavaRingHandler; import javax.xml.bind.DatatypeConverter...有下面几处地方要注意: 以上代码来自官方demo,我这里做了点小的改动(主要是文件路径改为外部参数传入) 整体功能是取出请求和响应的一些参数,打印在日志文件中 logUserAgent参数控制了user...agent是否打印,这个比较实用,可以通过配置来做一些开关控制 这个demo不要用于生产环境,从代码可以看出,每一次请求都做了一次io操作,这是存在性能隐患的,官方的demo只是展示log handler

    39450

    Java扩展Nginx之六:两大filter

    与/java做对比,如下图,可见先删再加、添加都正常,另外,由于Server配置项本来就存在,所以filter中的put操作的结果就是修改了配置项的值: 到这里header filter就介绍完了,接下来要看的是...body是字符串,那么body filter相对简单一些,以下几个规则要注意: 继承抽象类StringFacedJavaBodyFilter, 处理一次web请求的时候,doFilter方法可能被调用多次...只有三个元素:status, headers, filtered_chunk,一旦status值不为空,nginx-clojure框架会用这次doFilter的返回值作为最后一次调用,返回给客户端 结合...),这里有个重点注意的地方:bodyChunk只在当前doFilter执行过程中有效,不要将bodyChunk保存下来用于其他地方(例如放入body filter的成员变量中) 继续看doFilter方法的返回值...filter中),那么此时返回的status和headers值就会被忽略掉(也就是说,其实nginx-clojure框架只判断status是否为空,用于结束body filter的处理流程,至于status

    56130

    python中的map和filter避坑指南

    ◆ 首先要明白在python中什么是值类型 在python中要想了解值类型,首先得明白以下两个: 什么是可变类型 什么是不可变类型 我们拿常见的几个类型来开场: string 是值类型吗?...上述介绍只是一个引子,因为了解什么是可变的,什么是不可变的,什么是值类型对于资深pythoner是非常有意义的。 接下来我们从几个常见的问题来开始下面的课程。...你只在绝对需要的时候计算它,这是懒惰。这在函数式编程中很常见。这就是为什么这在python中是一个问题。...user=> a ; proof that a is something else (1 2 3 4 10 12) Filter在clojure中是惰性的,但是你得到了正确的结果,即过滤[1,2,3,4...◆ 在用 map and filter的时候如何避免入坑 要解决这些问题,我们必须 返回一个值,而不是迭代器 消除惰性或确保可变性不会影响返回值。 修复第一个问题就像返回一个列表或元组一样简单。

    54910

    来来来,咱们元编程入个门

    那么本文就干一些,尝试用粗浅的语言对 metaprogramming / macro 做个小小的入门,主要是讲清楚一些概念和思想。文字代码一起上,酒干倘卖无。...AST 我们知道,几乎任何语言中,代码在 "编译"(解释型语言在运行时也有编译的过程) 的过程中,都会生成一种树状的中间状态,这就是 AST。...lhs / rhs 不断嵌套下去,可以生成非常复杂的表达式的语法树。 ?...我们从 macro 的输入输出来仔细研究一下 macro,这(研究输入和输出)也是理解一个系统的第一步。...,所以返回的结果是一个 if 语句相关的 AST。 注意这里当我们要获取原始表达式的值时,我们需要使用 unquote 来获取表达式的值,而非表达式的 AST。

    953100

    Clojure 开发那些事

    作为万里长城的第一步,这篇文章首先如何入门 Clojure 语法,紧接着介绍 Clojure 开发环境搭建,然后介绍使用第三方库时的一些注意点,最后介绍一下常见的测试方法。...我这里放一些相关的资料,有兴趣的读者可以自取: Understanding Clojure’s Persistent Vectors What Lies Beneath - A Deep Dive Into...其实,在使用第三方类库之余,多去了解其实现,代码从 Github 上 Clone 下来,慢慢看,Clojure 里面提供了很多实用的小方法,像partition, juxt, group-by等等不一而足...nrepl Clojure 的 REPL 可以连接到远程服务器上的进程中,直接对进程中的函数或变量进行修改,这是非常便利的,对于很多运行时的错误可以采用这种方式解决,Emacs 与 Intellj 里面都提供了连接远程...大部分都是一些简单的语法介绍或者概念阐述,我希望能够弥补这一块,把自己使用 Clojure 开发的经历分享出来,供以后的同学参考。

    1.6K20
    领券