【发布时间】:2015-12-04 18:18:26
【问题描述】:
最近几天我在这里阅读 Stack Overflow、博客和 MSDN 文章。我显然对命名空间、Linq 和 XML 的工作方式缺乏一些基本的了解,因此需要帮助。如果我有更多的头发要拔掉,它现在就在我手中:-)
使用 C# 和 Linq to XML,我打开以下 opf.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<package version="2.0" xmlns="http://www.idpf.org/2007/opf" unique-identifier="">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
</metadata>
<manifest></manifest>
<spine toc="ncx"></spine>
<guide></guide>
</package>
我用以下代码打开这个文件:
File.Copy(_opfFile, opfFile, true);
XDocument opfDoc = XDocument.Load(opfFile);
不幸的是,我在这里完全迷路了。我需要做的是在每个主要节点下生成元素。对于metadata 节点,我需要创建具有命名空间和非命名空间的元素。对于文件的其余部分,我只需要添加不使用命名空间的常规节点。
下面是我想要实现的输出示例。我敢肯定,如果你能帮助我处理 metdata 和 manifest 节点,我可以弄清楚如何更新其余节点。
<?xml version="1.0" encoding="UTF-8"?>
<package xmlns:ibooks="http://www.idpf.org/2007/opf" unique-identifier="BookId" version="3.0" prefix="ibooks: http://www.idpf.org/2007/opf" xmlns="http://www.idpf.org/2007/opf">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
<dc:title>Untitled</dc:title>
<meta refines="#contributor" property="role" scheme="marc:relators">bkp</meta>
</metadata>
<manifest>
<item id="toc" href="toc.xhtml" media-type="application/xhtml+xml" properties="nav"/>
</manifest>
<spine toc="ncx"></spine>
<guide></guide>
</package>
您能否提供一些基本的 C#/Linq 代码:
- 如上例所示,查找并添加需要“dc”命名空间 (ns) 的
metadata项目。 - 添加一个不使用上例中命名空间的
metadata项。 - 添加一个新的
manifest项目,如上例所示。
我会分享我编写的代码,但它到处都是,而且我有很多注释代码。我可以告诉你的是,我经常会遇到空异常错误。
提前谢谢你。
【问题讨论】:
标签: c# xml linq linq-to-xml