XDocumentにドキュメントタイプを追加するにはどうすればよいですか?
-
06-07-2019 - |
質問
XML doctypeを追加したい既存のXDocumentオブジェクトがあります。例:
XDocument doc = XDocument.Parse("<a>test</a>");
次を使用してXDocumentTypeを作成できます
XDocumentType doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
しかし、既存のXDocumentにどのように適用しますか?
解決
既存の XDocument
に XDocumentType
を追加できますが、追加する最初の要素である必要があります。これに関するドキュメントはあいまいです。
コメントで AddFirst
を使用する便利な方法を指摘してくれたJeroenに感謝します。このアプローチにより、次のコードを記述できます。これは、 XDocument
にすでに要素が含まれている後に XDocumentType
を追加する方法を示しています。
var doc = XDocument.Parse("<a>test</a>");
var doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
doc.AddFirst(doctype);
別の方法として、 Add
メソッドを使用して XDocumentType
を既存の XDocument
に追加することもできますが、他の要素は必要ありません最初でなければならないので存在します。
XDocument xDocument = new XDocument();
XDocumentType documentType = new XDocumentType("Books", null, "Books.dtd", null);
xDocument.Add(documentType);
一方、次は無効であり、InvalidOperationExceptionが発生します。&quot;この操作は、誤って構造化されたドキュメントを作成します。&quot;
xDocument.Add(new XElement("Books"));
xDocument.Add(documentType); // invalid, element added before doctype
他のヒント
XDocument
コンストラクターに渡すだけです(完全な例):
XDocument doc = new XDocument(
new XDocumentType("a", "-//TEST//", "test.dtd", ""),
new XElement("a", "test")
);
または XDocumentを使用します。追加
(ルート要素の前に XDocumentType
を追加する必要があります):
XDocument doc = new XDocument();
doc.Add(new XDocumentType("a", "-//TEST//", "test.dtd", ""));
doc.Add(XElement.Parse("<a>test</a>"));
所属していません StackOverflow