XDocumentにドキュメントタイプを追加するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1413053

  •  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>"));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top