Xml検証は、私がしなければならないとき以外は触れるものではないので、何か愚かな私は行方不明で、これまでのところ私はグーグルで何か助けに失敗しました。私の問題は、文字かスペースしかないという制限があるタイプがあることです。先頭の改行を持つ要素は検証に失敗しますが、末尾に改行が入ります。後続の改行が失敗するようにするにはどうすればよいですか?XSDバリデーションが末尾改行に失敗しない
次のように私が剥ぎ取らテストケースを作成しました:
検証コード:
public List<XsdValidationError> ValidateXmlAgainstXsd(String xml, String xsdFilePath, Boolean processSchemaLocation = false)
{
var ret = new List<XsdValidationError>();
var xss = new XmlSchemaSet();
var xmlUrlResolver = new XmlUrlResolver();
xmlUrlResolver.CachePolicy = new RequestCachePolicy(RequestCacheLevel.Default);
xss.XmlResolver = xmlUrlResolver;
var xsdXElement = XElement.Parse(File.ReadAllText(xsdFilePath));
var targetNamespaceAttribute = xsdXElement.Attribute("targetNamespace");
xss.Add(targetNamespaceAttribute != null ? targetNamespaceAttribute.Value : "", xsdFilePath);
var settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas = xss;
settings.ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema;
if (processSchemaLocation)
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
settings.ValidationEventHandler += (sender, e) =>
{
var xve = new XsdValidationError { Message = e.Message, LineNumber = e.Exception.LineNumber, LinePosition = e.Exception.LinePosition };
ret.Add(xve);
};
using (var sr = new StringReader(xml))
{
var xr = XmlReader.Create(sr, settings);
while (xr.Read());
return ret;
}
}
public class XsdValidationError
{
public String Message { get; set; }
public int LineNumber { get; set; }
public int LinePosition { get; set; }
public override string ToString()
{
return String.Format("Line {0:n0}, Position {1:n0}: {2}", this.LineNumber, this.LinePosition, this.Message);
}
}
入力XMLおよびXSD:1が失敗しないXMLの人で
<People>
<Person>Hello Person One
</Person>
<Person>Hello Person Two</Person>
<Person>
Hello Person Three</Person>
</People>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="People">
<xs:complexType>
<xs:sequence>
<xs:element name="Person" maxOccurs="unbounded">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z ]+"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
、人は2回通過する必要があり、人3は失敗するはずです。私も失敗する人1が必要です。
入力XMLまたはXSDを変更できません。 Visual Studioはファイルを正しく検証します。何か案は?
私はグーグルでこの問題に似た何かを見つけることができないので、このようなバグです。私はこの問題に直面した最初の人ではないと思います。しかし、Xercesは私に試してみる何かを与えるので、ありがとう! – schlechtums