Я разработал небольшой C #
скрипт, который открывает файл XLS
, анализирует его и создает список файлов XML
, проверяющий их соответствие с файлом XSD
.
Я ' Я пытался загрузить эти проверенные файлы в стороннюю онлайн-службу (та же компания, которая предоставила мне документацию / xsd), и один сгенерированный файл не принимается, потому что НЕ ДЕЙСТВИТЕЛЬНО .
Файл не принимается, потому что у него есть пробел в начале десятичного значения в атрибуте узла; удаление этого места решает проблему.
Я создал простой тестовый пример, в котором метод XDocument Validate проверяет XML с дополнительным пространством без каких-либо проблем.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Schema;
using System.Xml.Linq;
using System.Xml;
using System.IO;
namespace TestParser {
class Program {
static void Main(string[] args) {
string xsdMarkup =
@"
";
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));
XDocument doc1 = new XDocument(
new XElement("option","test", new XAttribute("value", " 423423")
));
Console.WriteLine("Validating doc1");
bool errors = false;
doc1.Validate(schemas, (o, e) =>
{
Console.WriteLine("{0}", e.Message);
errors = true;
}, true);
Console.WriteLine("doc1 {0}", errors ? "not valid" : "validated");
Console.WriteLine();
Console.WriteLine("Contents of doc1:");
Console.WriteLine(doc1);
}
}
}
Результат такой:
Validating doc1
doc1 validated
Contents of doc1:
Верно ли, что синтаксический анализатор C # XML проверяет этот XML?
Файл не принят, поскольку в его атрибуте узла есть пробел в начале десятичного значения; удаление этого места решает проблему.
Я создал простой тестовый пример, в котором метод XDocument Validate проверяет XML с дополнительным пространством без каких-либо проблем.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Schema;
using System.Xml.Linq;
using System.Xml;
using System.IO;
namespace TestParser {
class Program {
static void Main(string[] args) {
string xsdMarkup =
@"
";
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));
XDocument doc1 = new XDocument(
new XElement("option","test", new XAttribute("value", " 423423")
));
Console.WriteLine("Validating doc1");
bool errors = false;
doc1.Validate(schemas, (o, e) =>
{
Console.WriteLine("{0}", e.Message);
errors = true;
}, true);
Console.WriteLine("doc1 {0}", errors ? "not valid" : "validated");
Console.WriteLine();
Console.WriteLine("Contents of doc1:");
Console.WriteLine(doc1);
}
}
}
Результат такой:
Validating doc1
doc1 validated
Contents of doc1:
Верно ли, что синтаксический анализатор C # XML проверяет этот XML?
Файл не принят, поскольку в его атрибуте узла есть пробел в начале десятичного значения; удаление этого места решает проблему.
Я создал простой тестовый пример, в котором метод XDocument Validate проверяет XML с дополнительным пространством без каких-либо проблем.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Schema;
using System.Xml.Linq;
using System.Xml;
using System.IO;
namespace TestParser {
class Program {
static void Main(string[] args) {
string xsdMarkup =
@"
";
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));
XDocument doc1 = new XDocument(
new XElement("option","test", new XAttribute("value", " 423423")
));
Console.WriteLine("Validating doc1");
bool errors = false;
doc1.Validate(schemas, (o, e) =>
{
Console.WriteLine("{0}", e.Message);
errors = true;
}, true);
Console.WriteLine("doc1 {0}", errors ? "not valid" : "validated");
Console.WriteLine();
Console.WriteLine("Contents of doc1:");
Console.WriteLine(doc1);
}
}
}
Результат такой:
Validating doc1
doc1 validated
Contents of doc1:
Верно ли, что синтаксический анализатор C # XML проверяет этот XML?
Можно ли заставить синтаксический анализатор быть более разборчивым в этом форматировании?