Мой код F # не может читать XML с использованием шаблона XSD - PullRequest
0 голосов
/ 01 декабря 2018

Я хочу проанализировать данные с моего банковского счета в F #, которые представлены в XML.У меня есть XSD-схема заявления.

Мой код читает схему, но не может прочитать структуру.Я вижу содержимое в XML в data.XElement, однако свойство data.AccountStatement не существует.Код переходит к опции None, а затем приложение вылетает.У вас есть идея, почему код загружает схему, но не может работать с данными в XML?

open FSharp.Data
let TestAddress = "TESTADDRESS"
let dateRegex = @"\d{1,2}[.]\d{1,2}[.]\d{4}";
type BankTransactionList = XmlProvider<Schema="Schemas/IBSchema.xsd">
let data = BankTransactionList.Parse(Http.RequestString(TestAddress))

[<EntryPoint>]
let main argv =
  let AccountStatement = 
    match data.AccountStatement with
      | Some v -> Some v
      | None -> None //code goes here
  let TransactionList = 
    match AccountStatement.Value.TransactionList with //and crashes here
      | Some v -> Some v
      | None -> None
  for transaction in TransactionList.Value.Transactions do
    printf "%s" transaction.Column22.Value
  0 // return an integer exit code

Я занимаюсь разработкой в ​​.Net Core 2.1.Вы можете увидеть анонимный пример XML-данных ниже.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AccountStatement>
    <Info>
        <accountId>X</accountId>
        <bankId>X</bankId>
        <currency>CZK</currency>
        <iban>X</iban>
        <bic>X</bic>
        <openingBalance>X</openingBalance>
        <closingBalance>X</closingBalance>
        <dateStart>X</dateStart>
        <dateEnd>X</dateEnd>
        <idFrom>X</idFrom>
        <idTo>16663326563</idTo>
    </Info>
    <TransactionList>
        <Transaction>
            <column_22 name="ID pohybu" id="22">0</column_22>
            <column_0 name="Datum" id="0">2018-08-25+02:00</column_0>
            <column_1 name="Objem" id="1">0</column_1>
            <column_14 name="Měna" id="14">CZK</column_14>
            <column_5 name="VS" id="5">1023</column_5>
            <column_16 name="Zpráva pro příjemce" id="16">Message</column_16>
            <column_8 name="Typ" id="8">Platba kartou</column_8>
            <column_9 name="Provedl" id="9">Pešík, Jiří</column_9>
            <column_17 name="ID pokynu" id="17">0</column_17>
        </Transaction>
    </TransactionList>
</AccountStatement>

1 Ответ

0 голосов
/ 02 декабря 2018

Я думаю, проблема в том, что для схемы требуется пространство имен: "http://www.fio.cz/IBSchema".

Добавление пространства имен в документ должно решить проблему:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AccountStatement xmlns="http://www.fio.cz/IBSchema">
    <Info>
        <accountId>X</accountId>
        <bankId>X</bankId>
        <currency>CZK</currency>
        <iban>X</iban>
        <bic>X</bic>
        <openingBalance>0</openingBalance>
        <closingBalance>0</closingBalance>
        <dateStart>2000-01-01</dateStart>
        <dateEnd>2001-01-01</dateEnd>
        <idFrom>0</idFrom>
        <idTo>16663326563</idTo>
    </Info>
    <TransactionList>
        <Transaction>
            <column_22 name="ID pohybu" id="22">0</column_22>
            <column_0 name="Datum" id="0">2018-08-25+02:00</column_0>
            <column_1 name="Objem" id="1">0</column_1>
            <column_14 name="Měna" id="14">CZK</column_14>
            <column_5 name="VS" id="5">1023</column_5>
            <column_16 name="Zpráva pro příjemce" id="16">Message</column_16>
            <column_8 name="Typ" id="8">Platba kartou</column_8>
            <column_9 name="Provedl" id="9">Pešík, Jiří</column_9>
            <column_17 name="ID pokynu" id="17">0</column_17>
        </Transaction>
    </TransactionList>
</AccountStatement>

Я надеюсь, что ваш банкне создавать документы без пространства имен и схемы, требующей его.

...