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;
  1. container.xmlファイルを開く
  2. rootfileタグの要素一覧を取得する(面倒なのでプレフィックスを削除して比較)
  3. rootfileタグの要素一覧から、先頭要素のfull-path属性の値を取得する

狙っているrootfile要素が先頭でなかったり、full-path属性がなければ例外吐いて落ちます。