图库的 xml 树解析器 (Haskell)

2024-04-16

我正在编写一个用于处理图形的库。 主要任务 - 解析 xml-tree。 这棵树看起来像

<graph nodes=4 arcs=5>
    <node id=1 />
    <node id=2 />
    <node id=3 />
    <node id=4 />
    <arc from=1 to=2 />
    <arc from=1 to=3 />
    <arc from=1 to=4 />
    <arc from=2 to=4 />
    <arc from=3 to=4 />
</graph>

存储结构:

type Id = Int

data Node = Node Id deriving (Show)
data Arc = Arc Id Id deriving (Show)

data Graph = Graph { nodes :: [Node],
             arcs  :: [Arc]}

如何将xml文件中的数据写入这个结构中? 我无法为这种类型的 xml 树编写解析器(HXT 库)


您需要使用 XML 库吗?这'标签汤' http://hackage.haskell.org/package/tagsoup库对于 not-really-xml 可能同样有效,如下所示:

import Text.HTML.TagSoup
import Data.Maybe

main = do
    s <- readFile "A.dat"

    -- get a list of nodes and arcs
    let g' = catMaybes
                [ case n of
                    TagOpen "node" [(_,n)]        -> Just (Left  $ Node (read n)) 
                    TagOpen "arc"  [(_,n), (_,m)] -> Just (Right $ Arc (read n) (read m))
                    _ -> Nothing

                | n <- parseTags s ]

    -- collapse them into a graph
    let g = foldr (\n g -> case n of
                                Left  n -> g { nodes = n : nodes g }
                                Right a -> g { arcs  = a : arcs  g }
                        ) (Graph [] []) g'

    print g

运行这个:

> main
Graph {nodes = [Node 1,Node 2,Node 3,Node 4], arcs = [Arc 1 2,Arc 1 3,Arc 1 4,Arc 2 4,Arc 3 4]}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图库的 xml 树解析器 (Haskell) 的相关文章

  • Haskell 长度函数实现

    我正在学习 Haskell 编程 我试图理解列表是如何工作的 因此我尝试编写两个可能的length功能 myLength a gt Integer myLength foldr x gt 1 0 myLength1 a gt Integer
  • 为什么 Haskell 类型签名声明有多个箭头?

    抱歉 这句话措辞不好 但很难描述 我想我会跳到这个例子 add Integer gt Integer gt Integer add x y x y 为什么 Integer gt Integer gt Integer 代替 Integer I
  • 在 Haskell 中编写 Web 应用程序的最简单方法是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在我的项目中更多地使用 Haskell 并且我认为如果我可以开始将它用于 Web 应用程序 这将真正
  • 运营商部分应用

    如果我想在字符末尾添加一个空格以返回列表 如果我不传递任何参数 我将如何通过部分应用程序来完成此操作 还有类型是 space Char gt Char 由于使用 和 运算符出现 解析错误 我在末尾添加空格时遇到问题 到目前为止我所拥有的是
  • 如何制作Applicative的固定长度向量实例?

    最近了解了推广 决定尝试写向量 LANGUAGE DataKinds GADTs KindSignatures module Vector where data Nat Next Nat Zero data Vector Nat gt gt
  • 使用 d3 在两个节点之间绘制多条边

    我一直在关注 Mike Bostock 的代码这个例子 http bl ocks org 1153292学习如何在 d3 中绘制有向图 并且想知道如何构建代码 以便可以在图中的两个节点之间添加多个边 例如 如果上例中的数据集定义为 var
  • 机器和管道(或其他类似的库)之间的概念区别是什么?

    我想学习这个概念 以便我能够理解和使用诸如machines http hackage haskell org package machines 我试着跟随R nar Bjarnason 关于机器的演讲 https dl dropbox co
  • ZedGraph 垂直线与 LineObj 问题

    我有一个 ZedGraphControl 里面有几条曲线 我想在一些固定的 x 位置添加垂直线 当然 这些线只能位于实际图形区域内 我尝试以下 LineObj line new LineObj Color Black xPos myPane
  • 带回溯的 Dijkstra 算法?

    In a 相关主题 https stackoverflow com questions 28333756 finding most efficient path between two nodes in an interval graph
  • Visual Studio 项目的依赖关系图

    我目前正在将一个大型解决方案 约 70 个项目 从 VS 2005 NET 2 0 迁移到 VS 2008 NET 3 5 目前我有 VS 2008 NET 2 0 问题是我需要将项目一一移动到新的 NET 框架 确保没有 NET 2 0
  • 让 GHC 生成“带进位加法 (ADC)”指令

    下面的代码将表示 192 位数字的两个未装箱字三元组添加到新的未装箱字三元组中 并且还返回任何溢出 LANGUAGE MagicHash LANGUAGE UnboxedTuples import GHC Prim plusWord2 Wo
  • .NET(或 MFC)的高速图形控件?

    我需要编写一个数字示波器类型的应用程序 有很多很棒的静态绘图控件 但我需要一些可以绘制每秒处理 4000 个样本的 16 条轨迹的东西 有人知道 NET 的高速图形控件吗 我什至会选择 MFC 因为它可以封装到 NET 控件中 谢谢您的帮助
  • 显示未定义的实例

    可以采取任何措施来为未定义的值定义 Show 实例吗 也许存在一些 GHC 扩展 我想要这样的东西 gt print 1 undefined 1 undefined 根据Haskell 2010 报告 第 9 章 http www hask
  • Haskell,optparse-generic 的未命名命令行参数

    我在用着optparse 通用 https hackage haskell org package optparse generic解析名为的程序的命令行参数example 我有一个带有命名字段的数据类型 记录语法 例如 data Exam
  • 生成所有可能的树

    给定以下数据类型定义 data FormTree Empty Node FormTree FormTree deriving Show 我想编写一个函数 它生成一个无限列表 其中包含按长度排序的所有可能的树 例如节点数量 下面的代码几乎满足
  • 将系统命令的结果绑定到 Haskell 中的变量

    如何在 Haskell 中运行系统命令and将其结果 即标准输出 绑定到变量 在伪 Haskell 中 我正在寻找类似以下内容的内容 import System Process main do output lt callCommand e
  • Gremlin 中的广度优先枚举

    我正在尝试使用 Gremlin 进行广度优先枚举 但是我无法找到一种方法来输出枚举期间观察到的所有步骤 我只能打印出最后一次迭代的结果 我的问题是 给定这样的起始节点 我如何使用 Gremlin 跟踪所有路径 不知道整体深度 并打印出我沿途
  • Haskell 中的实例声明

    我有这两个功能 primes sieve 2 where sieve p xs p sieve x x lt xs x mod p gt 0 isPrime number number 1 null x x lt takeWhile x g
  • 在 Haskell 中增长数组

    我想在 Haskell 中实现以下 命令式 算法 给定一个序列对 e0 s0 e1 s1 e2 s2 en sn 其中 e 和 s 部分不一定是自然数不同的是 在每个时间步都会随机选择该序列的一个元素 例如 ei si 并根据 ei si
  • 这个记忆的斐波那契函数是如何工作的?

    在我正在做的函数式编程课程的当前练习作业中 我们必须制作给定函数的记忆版本 为了解释记忆化 给出以下示例 fiblist fibm x x lt 0 fibm 0 0 fibm 1 1 fibm n fiblist n 1 fiblist

随机推荐

  • 在 SQL Server 2008 中添加列会锁定表吗?

    我想在大约 1200 万条记录的表上运行以下命令 ALTER TABLE t1 ADD c1 int NULL ALTER TABLE t2 ADD c2 bit NOT NULL DEFAULT 0 我已经在暂存中完成了它 并且时机似乎很
  • 如何在 Swift 中将十六进制数转换为 bin?

    我有字符串变量 var str 239A23F 如何将该字符串转换为二进制数 str toInt 不起作用 您可以使用NSScanner 来自基金会框架 let scanner NSScanner string str var result
  • 如何使x轴上的字体大小变量变小

    我有这段代码来创建条形图 但我想将 x 轴中的名称更改为物种名称 并且我想让字体变小 以便我可以将其全部放入 我尝试过使用cex 功能在各种组合中 但没有起作用 如果有建议我将不胜感激 count lt matrix c 16 102 11
  • Excel 2010 VBA ActiveChart.SetSourceData 失败

    我有一个 Excel VBA 应用程序 该应用程序在 Excel 2003 中运行良好 但在 Excel 2010 中失败 相关代码为 Public Sub Create Chart Dim c Dim OutputText As Stri
  • JUnit 测试时排除 @Component 类的过滤器?

    是否可以排除 Component带注释的类 我想从 JUnit 测试中排除一个特殊的类 我的项目有一个类xEventHandler注释为 Component我不希望 spring 在 junit 测试时使用这个类 我的应用程序 TestCo
  • 按 2 个键对 FireBase 中的数据进行排序

    我构建了游戏应用程序 并将记录保存在 FireBase 的实时数据库中 数据库看看 Ka8xxTgyFB8yYKH50j score 10 seconds 1325 K222xTgyFBF33FD50j score 10 seconds 4
  • 如何使用更少的包绘制二元正态分布的表面和轮廓

    我将绘制二元正态分布的 3D 曲面及其轮廓 可以是任何二元正态分布 我想用persp and contour在我的画中 我在网上搜索了一下 但发现了很多方法 大多数人都使用过一些软件包 但我想以使用更少的软件包甚至不安装任何软件包的方式来执
  • R:rJava 包安装失败

    使用以下命令安装 rJava 时install packages rJava 命令我收到以下错误 checking Java support in R present interpreter usr bin java archiver us
  • 为什么我在比较 Perl 中输入的行时遇到问题?

    我不知道这个简单的交易可能做错了什么 但它不起作用 print OK y or n n ans lt gt print n if ans eq y print ans 我基本上想知道如何测试用户输入 这点代码对我来说不起作用 我只是想打印
  • 嵌套 Javascript Promise - 从 firestore 获取数据

    在过去的三天里 我一直被这个错误困扰 我已经尝试了几乎所有的方法 尝试以 1000 种方式构建承诺 但似乎没有任何效果 也许我正在失去 大局 所以希望新的眼睛能有所帮助 谢谢阅读 我有一个在 Firebase Cloud Functions
  • Angular CLI 可执行文件 (ng) 始终仅显示可用命令的列表

    视窗 角 电子邮件受保护 cdn cgi l email protection节点 v 16 13 1 npm v 8 1 2 ng command 在 Windows CMD 中总是给出可用命令的列表 就像在这样的情况下 ng 但如果我使
  • 如何在本地主机中为 XAMPP 创建有效的 SSL [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我如何使用安全连接 SSL in my XAMPP在窗口中 当我打开 localhost 页面时出现以下错误 连接不安全 在我的 XAMP
  • Protractor:彻底清除浏览数据

    我正在寻找一种使用 Protractor 完全删除所有 cookie 会话 状态 cookie 存储等的方法 基本上 我想在量角器中完成与用户相同的事情 方法是转到 设置 gt 清除浏览数据 browser manage deleteAll
  • CsvHelper 更改日期和时间的输出方式

    我在用CSV助手 https joshclose github io CsvHelper 编写一些 CSV 文件 并希望将日期和时间的格式更改为特定的格式 遵循以下建议https stackoverflow com a 31817621 2
  • React-Native:从剪贴板设置和获取文本时出错

    import React useState from react import SafeAreaView View Text TouchableOpacity StyleSheet from react native import Clip
  • 分类变量的多重共线性

    对于数值 连续数据 为了检测预测变量之间的共线性 我们使用皮尔逊相关系数并确保预测变量之间不相关 但与响应变量相关 但我们怎样才能检测到多重共线性如果我们有一个数据集 其中预测变量都是绝对的 我正在共享一个数据集 我试图找出预测变量是否相关
  • 在 VB.NET 中防止 Math.Round(95.55555555,2) 四舍五入到 95.56

    If I do Math Round 95 55555555 2 在 VB NET 中 结果是95 56 但我希望结果是95 55 有没有办法在 VB NET 中做到这一点 我想我只是想保留小数位 而不是四舍五入 好像Math Trunca
  • 使用 PATH 列出 MediaStore 中的所有音乐

    好吧 我已经在这个项目上工作了几天 我的大部分时间都在研究如何在列表视图或其他东西中列出设备上的所有音乐 我已经搜索了几天并且这简直要了我的命 我确实一度非常接近显示一个文件夹中的所有音乐 但由于大多数人都会有像 artiest 和专辑这样
  • MySQL中如何压缩列?

    我有一个存储电子邮件通信的表 每当有人 回复 整个路径也被包含并保存到 数据库 我需要这样 因为应用程序的数量 级别更改以纠正太高的情况 尺寸mail文本列是10000 但是 我在存储文本时遇到的困难还不止这些 由于我不确定可以发生多少个通
  • 图库的 xml 树解析器 (Haskell)

    我正在编写一个用于处理图形的库 主要任务 解析 xml tree 这棵树看起来像