我開發了一個小的C#
腳本,該腳本打開XLS
文件,對其進行解析並創建一個XML
文件的列表,以便與XSD
文件進行驗證。XML驗證:以空格開頭的十進制屬性值
我試圖上傳這些驗證的文件到第三方在線服務(同一家公司,給了我的文檔/ 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 =
@"<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
<xs:element name='option'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute name='value' type='xs:decimal'>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>";
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:
<option value=" 423423">test</option>
它是正確的,因爲C#XML解析器驗證這個XML?
是否有可能強制解析器對這種格式更挑剔?
這是有趣的感謝;第三方採用的解析器似乎根本沒有做任何修剪。 – systempuntoout 2011-03-01 15:01:07