简体   繁体   中英

How to Add schemaLocation attribute to an XML document

Please view following XML namespace and schemaLocation.

<agr:ABWInvoice 
  xsi:schemaLocation = "
    http://services.agresso.com/schema/ABWInvoice/2011/11/14 
    http://services.agresso.com/schema/ABWInvoice/2011/11/14/ABWInvoice.xsd" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:agrlib = "http://services.agresso.com/schema/ABWSchemaLib/2011/11/14"
  xmlns:agr = "http://services.agresso.com/schema/ABWInvoice/2011/11/14"
>

</agr:ABWInvoice>

I have added namespaces in following way, which seems working fine:

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
ns.Add("agrlib", "http://services.agresso.com/schema/ABWSchemaLib/2011/11/14");
ns.Add("agr", "http://services.agresso.com/schema/ABWInvoice/2011/11/14");

But, how to add following schemalocation? Any ideas?

xsi:schemaLocation="http://services.agresso.com/schema/ABWInvoice/2011/11/14 http://services.agresso.com/schema/ABWInvoice/2011/11/14/ABWInvoice.xsd"
xs:schemaLocation="..."

is not a namespace declaration: it's an attribute (whose value happens to be a namespace, but never mind that). So you would add it with a method that sets an attribute value. I'm not familiar with the C# XML API, but it's probably something like

XmlElement.SetAttributeValue (localname, prefix, namespace, value)

localname should be "schemaLocation"
prefix = "xsi"
namespace = "http://www.w3.org/2001/XMLSchema-instance"
value = "your schema location"

The reply of Mike lead me to get following answer:

    [XmlAttributeAttribute("schemaLocation", AttributeName = "schemaLocation", 
    Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
    public string SchemaLocation = "http://services.agresso.com/schema/ABWInvoice/2011/11/14 http://services.agresso.com/schema/ABWInvoice/2011/11/14/ABWInvoice.xsd";

Just add this code in your class

public partial class MyClass{

    [XmlAttribute(Namespace = System.Xml.Schema.XmlSchema.InstanceNamespace)]
    public string schemaLocation = "http://www.adap.cx/m3/x4 lksdjv45.xsd";

... }

For me the accepted answer did not work, but this did work:

    var schema = new XmlSchema();
    schema.Namespaces.Add("xmlns", "urn:oasis:names:specification:ubl:schema:xsd:OrderResponse-2");
    var doc = new XmlDocument();
    doc.Schemas.Add(schema);
    var rootElement = doc.CreateElement("MyRoot");
    rootElement.SetAttribute("xmlns", "urn:oasis:names:specification:ubl:schema:xsd:OrderResponse-2");
    rootElement.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
    rootElement.SetAttribute("schemaLocation", "http://www.w3.org/2001/XMLSchema-instance", "urn:oasis:names:specification:ubl:schema:xsd:OrderResponse-2 file:///C:/DIGITALCAB/DigiTaxi/schema/OIOUBL/maindoc/UBL-OrderResponse-2.0.xsd");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM