Esto es realmente extraño y me temo que acabo de hacer algo tonto pero no puedo entenderlo.F # no pasa ninguno para funcionar, obteniendo nulo como valor de parámetro
estoy pasando None
a la función some
como el primer parámetro pero cuando la función se ejecuta, el valor de parentNode
es nulo (No estoy preocupado con ella la impresión nulo para None
, el valor del parámetro función es nula no None
) Termino obteniendo un error de referencia nulo en la línea de función de impresión porque parentNode es nulo. Intenté tuplar los argumentos y cambiar el orden, pero eso no ayudó. Tengo la sospecha de que esto tiene algo que ver con el currículum, pero estoy perdido ...
Tuve que reemplazar el valor de la URL real con una cadena vacía por cuestiones de la empresa, pero es una url para una xsd si eso ayuda
Aquí está el código:
#light
open System
open System.Xml
open System.Net
open System.Collections.Generic
type StartResult =
| Parameters of XsdParserParameters
| Xsd of Xsd
and Xsd(text) =
let rows = new List<string>()
member this.Text
with get() = text
member this.Rows
with get() = rows
and XsdParserParameters() =
let mutable url = ""
member this.Url
with get() = url
and set(value) = url <- value
member this.Start() =
try
use client = new WebClient()
let xsd = client.DownloadString(this.Url)
StartResult.Xsd(Xsd(xsd))
with e ->
StartResult.Parameters(this)
let processor() =
let parameters = XsdParserParameters()
parameters.Url <- ""
match parameters.Start() with
| StartResult.Parameters(xpparams) ->
//some error
()
| StartResult.Xsd(xsd) ->
let rec some (parentNode : XmlNode option) (node : XmlNode) =
let a =()
for subNode in node.ChildNodes do
match subNode.LocalName with
| "complexType" ->
xsd.Rows.Add(
sprintf
"%O~%s~%d~%d~%s~%s~%O"
parentNode
subNode.Value
1
1
(subNode.Attributes.GetNamedItem("name").Value)
""
false)
some (Some(subNode)) subNode
| "sequence" ->
some parentNode subNode
| "element" ->
xsd.Rows.Add(
sprintf
"%O~%s~%d~%d~%s~%s~%O"
parentNode
subNode.Value
1
1
(subNode.Attributes.GetNamedItem("name").Value)
""
false)
some (Some(subNode)) subNode
| _ ->
()
let xdoc = new XmlDocument();
xdoc.LoadXml(xsd.Text)
some (None) (xdoc.DocumentElement)
processor()
printfn "Done..."
Console.ReadLine() |> ignore
¿En qué línea obtiene una excepción de referencia nula? 'sprintf"% O "null' debería funcionar bien, y no veo ninguna otra referencia a' parentNode', ¿está seguro de que de allí viene el error? – Guvante