【问题标题】:Reading value from XML file Throws an error - FAKE F#MAKE从 XML 文件中读取值引发错误 - FAKE F#MAKE
【发布时间】:2017-03-21 04:27:00
【问题描述】:

我正在尝试从 FAKE 中的 XML 文件中读取值,但我收到了一个错误,即

.fsx(9,16) : eror FS000: Incomplete structurd construct at or before this
 point in expression. Expected '->' or other token.

以下是我的代码,我正在使用XMLHelper.XMLRead 从 xml 文件中读取值。

#r "./packages/FAKE/tools/FakeLib.dll"
open Fake
open Fake.XMLHelper
Target "BuildMain" (fun _ ->
    for s in XMLHelper.XMLRead true "D:/test/Version.Config" "/version/major/minor"
        trace s)
"BuildMain"
RunTargetOrDefault "BuildMain"

下面是我的 XML 文件:

<version>
  <major number="2">
    <minor>1</minor>
    <build>1</build>
    <revised>1</revised>
  </major>
</version>

我在这里尝试从次要版本中读取值,此外,我可以将此值存储在变量中以便以后使用吗??

【问题讨论】:

    标签: f# f#-interactive f#-3.0 f#-data f#-fake


    【解决方案1】:

    for ... in 结构在正文前需要do 或箭头-&gt;

    for s in XMLHelper.XMLRead true "D:/test/Version.Config" "/version/major/minor" do
        trace s
    

    如果主体是另一个循环或只是副作用代码,则使用do,如:

    for x in 1..5 do
       printfn "%d" x
    

    您使用箭头-&gt; 让主体产生一个值,然后该值成为结果列表或序列的一部分,如下所示:

    let evenNumbers2to10 = [for x in 1..5 -> x*2]
    

    箭头-&gt;可以看作是do yield的快捷方式:

    let evenNumbers2to10 = [for x in 1..5 do yield x*2]
    

    【讨论】:

    • 我在 for 循环中进行跟踪,正如你提到的,但我收到一个错误,即类型 '(string -> string ->seq)' 不是其值可以用这个 syantax 枚举,即不兼容 seq<_>,IEnumerable<_> 或 IEnumerable 并且没有 GetEnumerator 方法
    • XMLRead 函数还有两个参数。
    • 是的,现在它正在工作..感谢您的努力:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多