LINQ to XMLでパッケージ文書の配置を取得する
EPUBを作成する際、パッケージ文書のmodifiedの値を変更します。
パッケージ文書の配置はEPUBのcontainer.xmlに書かれているので、container.xmlを読む必要があります。ちなみにcontainer.xmlはこんなの。
<?xml version="1.0"?> <container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container"> <rootfiles> <rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml"></rootfile> </rootfiles> </container>
rootfileタグのfull-path属性を取得します。LINQ toXMLだと
//container.xmlファイルからパッケージ文書を取得する var doc = XElement.Load(container); var rootFileNodes = doc.Descendants().Where(e => e.Name.LocalName == "rootfile"); var rootFilePath = rootFileNodes.First().Attributes("full-path").First().Value;
- container.xmlファイルを開く
- rootfileタグの要素一覧を取得する(面倒なのでプレフィックスを削除して比較)
- rootfileタグの要素一覧から、先頭要素のfull-path属性の値を取得する
狙っているrootfile要素が先頭でなかったり、full-path属性がなければ例外吐いて落ちます。