【问题标题】:"xsi:type" attribute is changed to "type" c# xml document“xsi:type”属性改为“type” c# xml文档
【发布时间】:2020-06-03 05:59:58
【问题描述】:

我正在使用 XMLDocument 创建一个 XML 文件,但是当我在 .xml 生成的文件中为一个名为“xsi:type”的元素设置属性时,该属性被更改为只是“type”。

这是我期待的输出:

<ODX xsi:type="VALUE" />

这是我的代码

using System.Xml;
        public static void xml_test()
        {
            XmlDocument doc = new XmlDocument();
            XmlDeclaration declaire = doc.CreateXmlDeclaration("1.0", "utf-8", null);
            XmlElement ODX = doc.CreateElement("ODX");
            ODX.SetAttribute("xsi:type", "VALUE");
            doc.AppendChild(ODX);
            doc.Save("C:\\Users\\dev\\Pictures\\DocParser\\DocParser\\xml_question_test.xml");
        }

这是我得到的 xml_question_test.xml 输出文件的内容:

<ODX type="VALUE" />

请注意如何将属性名称从“xsi:type”更改为“type”,我尝试将属性名称设置为文字,在字符串之前使用 @,但它不起作用……我没有没找到有用的东西……

【问题讨论】:

标签: c# xml xml-serialization


【解决方案1】:

由于您要添加xs,因此您需要指定它所代表的命名空间。

public static void xml_test()
    {
        XmlDocument doc = new XmlDocument();
        XmlDeclaration declaire = doc.CreateXmlDeclaration("1.0", "utf-8", null);
        XmlElement ODX = doc.CreateElement("ODX");
        var attr = doc.CreateAttribute("xs:type", "http://www.w3.org/2001/XMLSchema");
        attr.Value = "VALUE";
        ODX.Attributes.Append(attr);
        doc.AppendChild(ODX);
        doc.Save("C:\\Users\\nemmil\\OneDrive - Snow Software\\Documents\\Creative Cloud user guide\\xml_question_test.xml");
    }

您可以在此处阅读有关 XML 命名空间的更多信息:https://www.w3schools.com/xml/xml_namespaces.asp

【讨论】:

  • 你的例子的输出是这样的: w3.org/2001/XMLSchema" /> 有没有办法只显示“xsi:type=VALUE” ?
  • @ChristopherMartinez - 不,这不是格式良好的 XML,因此 XmlDocument 不会创建它。前缀xsi: 只是对必须在元素范围内定义的命名空间的查找。如果未定义前缀,则 XML 格式错误。参见例如w3schools.com/xml/xml_namespaces.asp在 XML 中使用前缀时,必须为前缀定义一个命名空间此外,您始终可以将所需的 XML 上传到在线验证器,例如 @987654324 @ 以确保其格式正确。
猜你喜欢
  • 2015-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多