XmlSchemaPatternFacet.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // Author: Dwivedi, Ajay kumar
  2. // [email protected]
  3. using System;
  4. using System.Xml;
  5. namespace System.Xml.Schema
  6. {
  7. /// <summary>
  8. /// Summary description for XmlSchemaPatternFacet.
  9. /// </summary>
  10. public class XmlSchemaPatternFacet : XmlSchemaFacet
  11. {
  12. private static string xmlname = "pattern";
  13. public XmlSchemaPatternFacet()
  14. {
  15. }
  16. //<pattern
  17. // id = ID
  18. // value = anySimpleType
  19. // {any attributes with non-schema namespace . . .}>
  20. // Content: (annotation?)
  21. //</pattern>
  22. internal static XmlSchemaPatternFacet Read(XmlSchemaReader reader, ValidationEventHandler h)
  23. {
  24. XmlSchemaPatternFacet pattern = new XmlSchemaPatternFacet();
  25. reader.MoveToElement();
  26. if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)
  27. {
  28. error(h,"Should not happen :1: XmlSchemaPatternFacet.Read, name="+reader.Name,null);
  29. reader.Skip();
  30. return null;
  31. }
  32. pattern.LineNumber = reader.LineNumber;
  33. pattern.LinePosition = reader.LinePosition;
  34. pattern.SourceUri = reader.BaseURI;
  35. while(reader.MoveToNextAttribute())
  36. {
  37. if(reader.Name == "id")
  38. {
  39. pattern.Id = reader.Value;
  40. }
  41. else if(reader.Name == "value")
  42. {
  43. pattern.Value = reader.Value;
  44. }
  45. else if((reader.NamespaceURI == "" && reader.Name != "xmlns") || reader.NamespaceURI == XmlSchema.Namespace)
  46. {
  47. error(h,reader.Name + " is not a valid attribute for "+xmlname,null);
  48. }
  49. else
  50. {
  51. XmlSchemaUtil.ReadUnhandledAttribute(reader,pattern);
  52. }
  53. }
  54. reader.MoveToElement();
  55. if(reader.IsEmptyElement)
  56. return pattern;
  57. // Content: (annotation?)
  58. int level = 1;
  59. while(reader.ReadNextElement())
  60. {
  61. if(reader.NodeType == XmlNodeType.EndElement)
  62. {
  63. if(reader.LocalName != xmlname)
  64. error(h,"Should not happen :2: XmlSchemaPatternFacet.Read, name="+reader.Name,null);
  65. break;
  66. }
  67. if(level <= 1 && reader.LocalName == "annotation")
  68. {
  69. level = 2; //Only one annotation
  70. XmlSchemaAnnotation annotation = XmlSchemaAnnotation.Read(reader,h);
  71. if(annotation != null)
  72. pattern.Annotation = annotation;
  73. continue;
  74. }
  75. reader.RaiseInvalidElementError();
  76. }
  77. return pattern;
  78. }
  79. }
  80. }