gpt4 book ai didi

xml - 当文件具有 xmlns 属性时在 F# 中解析 xml

转载 作者:数据小太阳 更新时间:2023-10-29 02:05:37 26 4
gpt4 key购买 nike

所以我尝试使用F# XML parsing post在以下 xml 中(来自 uclassify API):

<?xml version="1.0" encoding="UTF-8" ?> 
<uclassify xmlns="http://api.uclassify.com/1/ResponseSchema" version="1.01">
<status success="true" statusCode="2000"/>
<readCalls>
<classify id="cls1">
<classification textCoverage="1">
<class className="happy" p="0.912929"/>
<class className="upset" p="0.0870707"/>
</classification>
</classify>
</readCalls>
</uclassify>

代码是这样的:

let doc  = 
Xdocument.Load file
doc.Element(xn "uclassify")
.Element(xn "readCalls")
.Element(xn "classify")
.Element(xn "classification")
.Element(xn "class").Attribute(xn "p")

这行不通!!!似乎无法完成解析。然而,删除属性 xmlns="http://api.uclassify.com/1/ResponseSchema"version="1.01" 使其工作:

let doc  = 
Xdocument.Load file
let test = IO.File.ReadAllText(file).Replace("xmlns=\"http://api.uclassify.com/1/ResponseSchema\" version=\"1.01\"","")
XDocument.Parse(test)

doc.Element(xn "uclassify")
.Element(xn "readCalls")
.Element(xn "classify")
.Element(xn "classification")
.Element(xn "class").Attribute(xn "p")

注意这个问题似乎与 Why must I remove xmlns attribute ... 有关.所以问题是为什么我必须删除 xmlns 属性?我应该使用什么来解析具有 xmlns 属性的 xml?

谢谢

最佳答案

@dahlbyk 的版本有效,但是一旦您拥有 XNamespace 对象,就可以像在 C# 中一样在 F# 中向其添加字符串。因此,我更喜欢这种语法,因为它更接近于通常在 C# 中完成的方式:

let xn = XName.Get
let xmlns = XNamespace.Get

let ns = xmlns "http://api.uclassify.com/1/ResponseSchema"

doc.Element(ns + "uclassify")
.Element(ns + "readCalls")
.Element(ns + "classify")
.Element(ns + "classification")
.Element(ns + "class")
.Attribute(xn "p")

关于xml - 当文件具有 xmlns 属性时在 F# 中解析 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5869898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com