c# - 显式和隐式 XML namespace

标签 c# xml namespaces

我的问题是如何将值设置为具有相同名称但 namespace 不同的两个属性。

使用 C#,在 XML 文档中,我需要为元素分配两个属性。它应该看起来像

文档 xmlns:xmi="uriaddress"
元素 xsi:type="xsitype1"type="type1"


我试过

xElement.SetAttribute("type","uriaddress","xsitype1")

这很好用!

然而,令我惊讶的是,当我尝试设置第二个属性“类型”时,

xElement.SetAttribute("type","type1")

这是有效的,但它也会将属性 xmi:type 重置为与属性“type”相同的值,从而以意想不到的方式更改元素。

现在元素看起来像

元素 xsi:type="type1"type="type1"

有什么办法可以解决这个问题?

最佳答案

这段代码:

    XDocument d = new XDocument();
    XNamespace xsi = "uriaddress";
    d.Add(
        new XElement(
            "element",
            new XAttribute(XNamespace.Xmlns + "xsi", "uriaddress"),
            new XAttribute("type", "foo"),
            new XAttribute(xsi + "type", "bar")));
    using (XmlWriter xw = XmlWriter.Create(Console.Out))
    {
        d.WriteTo(xw);
    }

    d.Element("element").SetAttributeValue("type", "baz");
    using (XmlWriter xw = XmlWriter.Create(Console.Out))
    {
        d.WriteTo(xw);
    }

    d.Element("element").SetAttributeValue(xsi + "type", "bar");        
    using (XmlWriter xw = XmlWriter.Create(Console.Out))
    {
        d.WriteTo(xw);
    }

生成此输出(添加空格并删除 XML 声明以提高可读性):
<element xmlns:xsi="uriaddress" type="foo" xsi:type="bar" />

<element xmlns:xsi="uriaddress" type="baz" xsi:type="bar" />

<element xmlns:xsi="uriaddress" type="baz" xsi:type="bat" />

如果您不使用 XDocument (很难从您的原始帖子中看出),此代码产生的结果基本相同:
    XmlDocument d = new XmlDocument();
    d.LoadXml("<element xmlns:xsi='uriaddress' type='foo' xsi:type='bar'/>");
    Console.WriteLine(d.OuterXml);

    d.DocumentElement.SetAttribute("type", "baz");
    Console.WriteLine(d.OuterXml);

    d.DocumentElement.SetAttribute("type", "uriaddress", "bat");
    Console.WriteLine(d.OuterXml);

关于c# - 显式和隐式 XML namespace ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1307679/

相关文章:

c# - 是否可以将依赖属性框架插入 Winform 或 ASP.NET?

java - 使用 Maven 连接多个独立的 Spring 应用程序

android - android布局xml文件中的 “?android:attr/”和 “?attr/”有什么区别?

c# - 如何让命名空间别名 operator::在 C# 下工作?

php - 仅在生产服务器上找不到类错误

c# - DotNet 中 Textbox/RichTextbox 内部的组件

c# - Openid 显示提供商的图像

c# - 为什么 Controller 首先在 ASP.NET MVC 中运行?

java - jaxb 生成的类中的继承

c# - 是否可以在同一个文件 (.cs) 中添加 1 个以上的命名空间?