Skip to content

Instantly share code, notes, and snippets.

@marnix
Created September 11, 2012 09:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marnix/3697081 to your computer and use it in GitHub Desktop.
Save marnix/3697081 to your computer and use it in GitHub Desktop.
Fix for the problem reported in https://gist.github.com/3002649
function cleanup() {
write-host "Cleaning up..."
remove-item $schemaFile
break
}
trap {
cleanup
}
$TEST_SCHEMA = @'
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:x">
<element name="a" type="string"/>
<element name="b" type="string"/>
<element name="c" type="string"/>
<element name="d" type="string"/>
<element name="e" type="string"/>
<element name="f" type="string"/>
<element name="A" type="x:string"/>
<element name="B" type="string"/>
<element name="C" type="string"/>
<element name="D" type="string"/>
<element name="E" type="y:string"/>
<element name="F" type="string"/>
</schema>
'@
Add-Type -ReferencedAssemblies System.Xml -TypeDefinition @"
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using System.Xml.Schema;
public class XsdValidator
{
private List<ValidationEventArgs> _errors = new List<ValidationEventArgs>();
public IEnumerable<ValidationEventArgs> Validate(string schemaFileName)
{
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.ValidationEventHandler += ValidationCallBack;
using (XmlReader reader = XmlReader.Create(schemaFileName)) {
schemaSet.Add(null, reader);
}
schemaSet.Compile();
return _errors;
}
private void ValidationCallBack(object sender, ValidationEventArgs e)
{
_errors.Add(e);
}
}
"@
$schemaFileName = [System.IO.Path]::GetTempFileName()
$TEST_SCHEMA > $schemaFileName
$count = 0
$N = 10000
1..$N |% {
try {
$validator = new-object -typename XsdValidator
$validator.Validate($schemaFileName) |% {
$a = $_
$e = $a.Exception
$GLOBAL:count += 1
write-host "#$GLOBAL:count ${schemaFileName}: $($a.Severity) in $($e.SourceUri) at line $($e.LineNumber) column $($e.LinePosition): $($e.Message)"
}
} catch {
write-host "$($schemaFileName): Exception: $_"
}
}
write-host
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment