首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xsi的问题:schemaLocation

xsi的问题:schemaLocation
EN

Stack Overflow用户
提问于 2016-02-05 00:07:48
回答 3查看 1.2K关注 0票数 2

我在这里和网络上的其他地方找到了关于这个主题的多个答案。但我想不出在HTML中创建以下序列的解决方案:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<RSIL:Project xmlns:RSIL="http://www.url.com/RSIL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:eQ="http://www.url.com/eQ" xsi:schemaLocation="http://www.url.com/RSIL Name_RSIL.xsd">

不知何故,schemaLocation的xsi前缀丢失了,或者它被设置为d1p1。根据结果的不同,当前代码看起来与下面的代码类似:

代码语言:javascript
复制
XmlElement projectElement = rsil.CreateElement("RSIL", "Project", @"http://www.url.com/RSIL");
rsil.AppendChild(projectElement);
projectElement.SetAttribute("xmlns:xsi", @"http://www.w3.org/2001/XMLSchema-instance");
projectElement.SetAttribute("xmlns:eQ", @"http://www.url.com/eQ");
XmlAttribute grAt = rsil.CreateAttribute("xsi", "schemaLocation", "http://www.url.com/RSIL Name_RSIL.xsd");
projectElement.Attributes.Append(grAt);
EN

回答 3

Stack Overflow用户

发布于 2016-02-05 00:19:40

使用LINQ to XML,您可以使用

代码语言:javascript
复制
    XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance",
               RSIL = "http://www.url.com/RSIL",
               eQ = "http://www.url.com/eQ";

    XDocument doc = new XDocument(
        new XElement(RSIL + "Project",
                     new XAttribute(XNamespace.Xmlns + "RSIL", RSIL),
                     new XAttribute(XNamespace.Xmlns + "xsi", xsi),
                     new XAttribute(XNamespace.Xmlns + "eQ", eQ),
                     new XAttribute(xsi + "schemaLocation", "http://www.url.com/RSIL Name_RSIL.xsd")));

    Console.WriteLine(doc);

参见https://dotnetfiddle.net/iP2Gse

如果需要在.NET框架中使用DOM实现,那么

代码语言:javascript
复制
    string xsi = "http://www.w3.org/2001/XMLSchema-instance",
               RSIL = "http://www.url.com/RSIL",
               eQ = "http://www.url.com/eQ";

    XmlDocument doc = new XmlDocument();

    XmlElement project = doc.CreateElement("RSIL:Project", RSIL);

    project.SetAttribute("xmlns:RSIL", RSIL);
    project.SetAttribute("xmlns:xsi", xsi);
    project.SetAttribute("xmlns:eQ", eQ);

    XmlAttribute schemaLoc = doc.CreateAttribute("xsi", "schemaLocation", xsi);
    schemaLoc.Value = "http://www.url.com/RSIL Name_RSIL.xsd";

    project.SetAttributeNode(schemaLoc);

    doc.AppendChild(project);


    Console.WriteLine(doc.OuterXml);

似乎能胜任这项工作。

票数 2
EN

Stack Overflow用户

发布于 2016-02-05 00:35:53

使用XmlTextWriter,您可以这样做:

代码语言:javascript
复制
var writer = new XmlTextWriter("output.xml", Encoding.UTF8)
{
    Formatting = Formatting.Indented,
    Indentation = 1,
    IndentChar = '\t',
    Namespaces = true,
};

writer.WriteStartDocument();

writer.WriteStartElement("RSIL", "Project", "http://www.url.com/RSIL");
writer.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
writer.WriteAttributeString("xmlns:eQ", "http://www.url.com/eQ");
writer.WriteAttributeString("xsi:schemaLocation", "http://www.url.com/RSIL Name_RSIL.xsd");
writer.WriteEndElement();

writer.WriteEndDocument();

writer.Flush();
writer.Close();

这至少会产生您想要的结果:

代码语言:javascript
复制
<RSIL:Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:eQ="http://www.url.com/eQ" xsi:schemaLocation="http://www.url.com/RSIL Name_RSIL.xsd" xmlns:RSIL="http://www.url.com/RSIL" />
票数 0
EN

Stack Overflow用户

发布于 2019-11-01 03:41:23

请参阅这篇文章

https://social.msdn.microsoft.com/Forums/en-US/fa7205f7-f5f5-40bb-9b14-cb64c1ba5665/schemalocation-problem-with-serialization?forum=xmlandnetfx

通常,schemaLocation属性属于名称空间http://www.w3.org/2001/XMLSchema-instance,并且具有前缀xsi。您可以通过以下方式实现此目的:

代码片段

代码语言:javascript
复制
public class exampleClass

{

public exampleClass() { }

[System.Xml.Serialization.XmlAttributeAttribute(AttributeName = "schemaLocation", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]

public string schemaLocation = "http://www.rewerse.net/I1/2006/R2ML http://oxygen.informatik.tu-cottbus.de/R2ML/0.4/R2ML.xsd";

}



XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();

namespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");

exampleClass example = new exampleClass();

XmlSerializer serializer = new XmlSerializer(typeof(exampleClass));

serializer.Serialize(Console.Out, example, namespaces);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35205892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档