|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Validate using MSXML
Sorry if this list is not for a specific engine, but I simply can't find any help to my problem. I'm using Microsoft XML to render my XSL and I have a project consisting of the following files: sample_data.xml feeData.xsd fees_language.xml fees_language.xsd fees.xslt The sample_data.xml references the feeData.xsd and is valid, fees_language references fees_language.xsd and is also valid. The XSLT itself is able to transform the XML in sample_data.xml to HTML, and uses the fees_language.xml as a variable in this way: <xsl:variable name="Language_Id" select="Fee_Root/Fees/@Language_Id"/> <xsl:variable name="Language" select="document('fees_language.xml')/Languages/Language[@Language_Id=$Language_Id]"/> This selects the correct language from my fees_language, and puts it into a variable. When I open my sample_data.xml in Firefox or Internet Explorer, it renders correctly. And when I debug my XSLT in Stylus Studio, it als renders correctly. However, I would like to check if the XML is valid when parsing in my ASP solution and here is how i do it: (Code simplified, I have removed a lot of error checking) -- Setup Objects Set objXMLDOM = Server.CreateObject("MSXML2.DOMDocument.4.0") Set objFreeDOM = Server.CreateObject("MSXML2.FreeThreadedDOMDocument.4.0") Set objXSLTemplate = Server.CreateObject("MSXML2.XSLTemplate.4.0") Set objXSDCache = Server.CreateObject("Msxml2.XMLSchemaCache.4.0") -- Add XSD to Cache, and then to the objXMLDOM Dim XSDName : XSDName = Request.servervariables("APPL_PHYSICAL_PATH").item & "feeData.xsd" objXSDCache.Add "", XSDName set objXMLDOM.schemas = objXSDCache -- Load XML, xml_string is XML generated from the database objXMLDom.loadXML(xml_string) -- Load XSL into a free threaded DOM objFreeDOM.async = False objFreeDOM.resolveExternals = False (I have also tested with True) objFreeDOM.validateOnParse = False objFreeDOM.load(filename) -- Attach XSL to Template objXSLTemplate.stylesheet = objFreeDOM -- Create the processor Dim processor set processor = objXSLTemplate.createProcessor -- Transform processor.transform -- And then output result = processor.output (Code done) When i run this code i get an error: Error while parsing "file:///F:/CVS/fees_language.xml". The element 'Languages' is used but not declared in the DTD/Schema. It says that the Languages element is not part of the feeData.xsd - Thats correct, its part of its own XSD named fees_language.xsd. Is there a way of getting around this error? I would prefer to have separate XSD's for each of my XML files, but I also would like to know if the XML fed to the XSL is bad. And putting it all into one XSD is also something I'd like to avoid. If I ommit the line: set objXMLDOM.schemas = objXSDCache It works like a charm (but is not validating the XML) Files can be zipped and made available upon request. Best regards, Michael Nielsen
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|






