一个xelement和多个名称空间

时间:2016-01-10 20:55:26

标签: c# xml visual-studio namespaces

最近,我一直在处理使用两个命名空间的文档。我已经能够创建多个使用不同命名空间的XElements,例如这里已经回答: How to load and add elements in an XML tree

问题是,我需要将两个dc和opf命名空间组合在同一个元素中,我无法弄清楚如何做到这一点。我使用此代码创建XML元素:

//open the opf file as an LINQ XML document.
XDocument opfDoc = XDocument.Load(opfFile);

//create the xmlnamespaces required for the <metadata> section of the opf file.
var dc = (XNamespace)"http://purl.org/dc/elements/1.1/";
var opf = (XNamespace)"http://www.idpf.org/2007/opf";

//**add book metadata
meta.Add(new XElement(dc + "creator", bookCreators[0].bookCreator));

输出如下:

<dc:creator>Author Name</dc:creator>

我需要做的是添加一个或多个使用其他命名空间的附加属性,因此代码输出:

<dc:creator opf:file-as="Name, Author">Author Name</dc:creator>

我尝试编写此代码......

    meta.Add(new XElement(dc + "creator", 
        new XmlAttribute(opf + "file-as", bookCreators[0].bookCreatorFileAs),
        bookCreators[0].bookCreator));

...但我一直收到此错误消息:

  

xattribute不包含带有两个参数的构造函数

您能推荐一种解决此问题的方法吗?

感谢。

1 个答案:

答案 0 :(得分:1)

正如Henk指出的那样,我使用XMLAttribute而不是XAttribute。一旦我这样做,我得到了我需要的东西。以下是有效的代码:

    meta.Add(new XElement(dc + "creator", 
        new XAttribute(opf+ "role", "aut"),
        new XAttribute(opf+ "file-as",bookCreators[0].bookCreatorFileAs),
        bookCreators[0].bookCreator));