最近,我一直在处理使用两个命名空间的文档。我已经能够创建多个使用不同命名空间的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不包含带有两个参数的构造函数
您能推荐一种解决此问题的方法吗?
感谢。
答案 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));