// 7.2.11 nodeElement // start-element ( URI == nodeElementURIs, // attributes == set ( ( idAttr | nodeIdAttr | aboutAttr )?, propertyAttr* ) ) // propertyEltList // end-element() // // 7.2.13 propertyEltList // ws* ( propertyElt ws* )* private void ParseNodeElement (XmpNode parent, XmlNode node) { if (!node.IsNodeElement ()) throw new CorruptFileException ("Unexpected node found, invalid RDF?"); if (node.Is (RDF_NS, SEQ_URI)) { parent.Type = XmpNodeType.Seq; } else if (node.Is (RDF_NS, ALT_URI)) { parent.Type = XmpNodeType.Alt; } else if (node.Is (RDF_NS, BAG_URI)) { parent.Type = XmpNodeType.Bag; } else if (node.Is (RDF_NS, DESCRIPTION_URI)) { parent.Type = XmpNodeType.Struct; } else { throw new Exception ("Unknown nodeelement found! Perhaps an unimplemented collection?"); } foreach (XmlAttribute attr in node.Attributes) { if (attr.In (XMLNS_NS)) continue; if (attr.Is (RDF_NS, ID_URI) || attr.Is (RDF_NS, NODE_ID_URI) || attr.Is (RDF_NS, ABOUT_URI)) continue; if (attr.Is (XML_NS, LANG_URI)) throw new CorruptFileException ("xml:lang is not allowed here!"); parent.AddChild (new XmpNode (attr.NamespaceURI, attr.LocalName, attr.InnerText)); } foreach (XmlNode child in node.ChildNodes) { if (child is XmlWhitespace || child is XmlComment) continue; ParsePropertyElement (parent, child); } }