Avatar billede dennism Nybegynder
06. november 2009 - 12:10 Der er 8 kommentarer og
1 løsning

Validering af XML mod XML Schema?

Jeg har lavet et XML Schema. Hvordan validerer jeg et XML-dokument op mod mit XML Schema?
Avatar billede arne_v Ekspert
06. november 2009 - 15:14 #1
Eksempel:

using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;

namespace E
{
    public class Program
    {
        private static void ValiderXSD()
        {
            try
            {
                XmlReaderSettings xrs = new XmlReaderSettings();
                xrs.ValidationType = ValidationType.Schema;
                xrs.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings;
                xrs.ValidationEventHandler += ValidationEventHandler;
                xrs.Schemas.Add(XmlSchema.Read(new StreamReader(@"C:\z.xsd"), null));
                XmlReader xr = XmlReader.Create(@"C:\z.xml", xrs);
                XmlDataDocument doc = new XmlDataDocument();
                doc.Load(xr);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception: {0}", ex.Message);
            }
        }
        public static void ValidationEventHandler(object sender, ValidationEventArgs e)
        {
            switch (e.Severity)
            {
                case XmlSeverityType.Error:
                    Console.WriteLine("Error: {0}", e.Message);
                    break;
                case XmlSeverityType.Warning:
                    Console.WriteLine("Warning {0}", e.Message);
                    break;
            }
        }
        public static void Main(string[] args)
        {
            ValiderXSD();
        }
    }
}
Avatar billede dennism Nybegynder
06. november 2009 - 15:16 #2
Tak. Findes der ikke nogen online validator el. lign?
Avatar billede arne_v Ekspert
06. november 2009 - 15:28 #3
Ups. Jeg troede at det var et programmerings spoergsmaal. Sorry.

Enhver god XML editor kan validere XML mod et Schema.
Avatar billede arne_v Ekspert
06. november 2009 - 15:28 #4
Jeg bruger selv JEdit tild en slags.
Avatar billede arne_v Ekspert
06. november 2009 - 15:28 #5
Avatar billede dennism Nybegynder
08. november 2009 - 14:50 #6
Jeg har nogle problemer med at få mit XML Schema til at opføre sig som det skal. Jeg har kogt det lidt ned og har nu følgende XML dokument:

<?xml version="1.0" encoding="UTF-8"?>
<geographic xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="XMLSchema.xsd">
    <point>
        <address>Address</address>
        <note>Home</note>
    </point>
    <point>
        <latitude>000</latitude>
        <longitude>000</longitude>
        <note>Home</note>
    </point>
</geographic>

Reglerne er:
- Note-elementet skal kunne forekomme et hvilket som helst sted inden i point-elementet.
- latitude/longtitude skal kun kunne indsættes, hvis address ikke er indsat.

Det er ikke lykkedes mig at få et XML Schema til at behandle denne problemstilling. Er det evt. noget du kan hjælpe mig med?
Har et eksempel på mit nuværende XML Schema her:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="address" type="xs:string"/>
<xs:element name="latitude" type="xs:string"/>
<xs:element name="longitude" type="xs:string"/>
<xs:element name="note" type="xs:string"/>

<xs:element name="geographic">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="point">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="address" type="xs:string"/>
                        <xs:element name="latitude" type="xs:string"/>
                        <xs:element name="longitude" type="xs:string"/>
                        <xs:element ref="note" minOccurs="0"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

</xs:schema>

På forhånd tak.
Avatar billede arne_v Ekspert
08. november 2009 - 16:53 #7
Første forsøg:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="geographic">
    <xs:complexType>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
            <xs:element name="point">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="note" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:choice>
                            <xs:element name="address" type="xs:string"/>
                            <xs:sequence>
                                <xs:element name="latitude" type="xs:string"/>
                                <xs:element name="longitude" type="xs:string"/>
                            </xs:sequence>
                        </xs:choice>
                        <xs:element name="note" type="xs:string" minOccurs="0" maxOccurs="1"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

</xs:schema>
Avatar billede dennism Nybegynder
10. november 2009 - 13:49 #8
Tak, Arne! Vil du smide et svar?
Avatar billede arne_v Ekspert
10. november 2009 - 14:56 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester