首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将xmlns添加到xml文档中?

如何将xmlns添加到xml文档中?
EN

Stack Overflow用户
提问于 2016-12-23 18:00:13
回答 2查看 162关注 0票数 0

我正在尝试创建一个非常简单的XML文档,如下所示。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<employees xmlns="http://website.com/xsd/MQ">
    <employee>
        <id>00122731</id>
        <first-name>LUIS</first-name>
        <last-name>GARCIA</last-name>
        <subarea>4100</subarea>
        <cost-center>904</cost-center>
        <email-address>L.GARCIA@EMAIL.COM</email-address>
    </employee>
</employees>

我能够通过使用这段代码获得基本知识,但是我需要添加xmlns属性,而且我还没有弄清楚如何做到这一点。

代码语言:javascript
复制
var xmlDoc = new XElement("employees",
from e in listEmployees
select new XElement("employee",
    new XElement("id", e.EmployeeId),
    new XElement("first-name", e.FirstName),
    new XElement("last-name", e.LastName),
    new XElement("subarea", e.SubArea),
    new XElement("cost-center", e.CostCenter),
    new XElement("email-address", e.EmailAddress)));

这是我添加它的尝试,但我得到一个错误,这将导致和无效的结构。

代码语言:javascript
复制
XDocument xmlDoc = new XDocument(
    new XElement("employees",
        new XAttribute("xmlns", "http://website/xsd/MQ")),                        
        from e in listEmployees
        select new XElement("employee",
            new XElement("id", e.EmployeeId),
            new XElement("first-name", e.FirstName),
            new XElement("last-name", e.LastName),
            new XElement("subarea", e.SubArea),
            new XElement("cost-center", e.CostCenter),
            new XElement("email-address", e.EmailAddress))
);

更新

基于下面提供的链接,这是我想出的工作。

代码语言:javascript
复制
XNamespace ns = "http://website/xsd/MQ";
var xmlDoc = new XElement(ns + "employees",
from e in listEmployees
select new XElement("employee",
    new XElement("id", e.EmployeeId),
    new XElement("first-name", e.FirstName),
    new XElement("last-name", e.LastName),
    new XElement("subarea", e.SubArea),
    new XElement("cost-center", e.CostCenter),
    new XElement("email-address", e.EmailAddress)));
EN

回答 2

Stack Overflow用户

发布于 2016-12-23 18:32:48

您需要在所有元素中包括名称空间,而不仅仅是顶部的元素:

代码语言:javascript
复制
XNamespace ns = "http://website/xsd/MQ";
var xmlDoc = new XElement(ns + "employees",
    from e in listEmployees
    select new XElement(ns + "employee",
        new XElement(ns + "id", e.EmployeeId),
        new XElement(ns + "first-name", e.FirstName),
        new XElement(ns + "last-name", e.LastName),
        new XElement(ns + "subarea", e.SubArea),
        new XElement(ns + "cost-center", e.CostCenter),
        new XElement(ns + "email-address", e.EmailAddress)
    )
);

如果这对你来说太重复了,你可以做一个方便的方法:

代码语言:javascript
复制
XNamespace ns = "http://website/xsd/MQ";
private static XElement MQElement(string name, object contents)
{
    return new XElement(ns + name, contents);
}

然后使用它:

代码语言:javascript
复制
var xmlDoc = MQElement("employees",
    from e in listEmployees
    select MQElement("employee",
        MQElement("id", e.EmployeeId),
        MQElement("first-name", e.FirstName),
        MQElement("last-name", e.LastName),
        MQElement("subarea", e.SubArea),
        MQElement("cost-center", e.CostCenter),
        MQElement("email-address", e.EmailAddress)
    )
);
票数 2
EN

Stack Overflow用户

发布于 2016-12-23 19:13:28

实现相同结果的另一个选择是完全忽略名称空间构造XElement,然后将它们添加到单独的代码中:

代码语言:javascript
复制
foreach (XElement e in xmlDoc.DescendantsAndSelf())
{
  if (e.Name.Namespace == "")
  {
    e.Name = ns + e.Name.LocalName;
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41305903

复制
相关文章

相似问题

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