如何递归获取XmlProvider的所有XElement子代

时间:2018-09-13 13:48:28

标签: recursion f# f#-data fsharp.data.typeproviders

我正在尝试根据以下XML使用F#为C#构建动态类型/类构建器

<config target="string">
    <protocol>string</protocol>
    <about_path>string</about_path>
    <about_content>
        <name_path>string</name_path>
        <id_path>string</id_path>
        <version_path>string</version_path>
    </about_content>
</config>

使用下面的代码,我可以很好地解析示例

module XmlParser =
    open FSharp.Data
    open System.Globalization
    open FSharp.Data.Runtime.BaseTypes
    open System.Xml.Linq

    [<Literal>]
    let targetSchema = "<config target=\"string\">
                            <protocol>string</protocol>
                            <about_path>string</about_path>
                            <about_content>
                                <name_path>string</name_path>
                                <id_path>string</id_path>
                                <version_path>string</version_path>
                            </about_content>
                        </config>"

    type Configuration = XmlProvider<targetSchema> 

现在的问题是,我无法集中精力获取about_content标记的内部部分。

使用解析实际xml后

let parsedValue = Configuration.Parse(xmlIn)

我试图绕过F#中的递归处理,但被困在看起来像这样的非工作代码中(eparsedValue.XElement

let rec flatten ( e : System.Xml.Linq.XElement) (out:List<string>) = 
    if e.HasElements 
    then for inner in e.Elements -> flatten(inner)
    else e.Name.LocalName

作为递归的结果,我需要提示如何将e.Name.LocalName值收集到序列/列表中。我也可以忍受最后有XElement个列表。

0 个答案:

没有答案