2012-05-07 27 views
4

DOMDocument60オブジェクトのdoctypeを設定するにはどうすればよいですか?例えばXMLDOMDocumentのdoctypeを設定するにはどうすればいいですか?

私が試してみてください。

IXMLDOMDocumentType = interface(IXMLDOMNode) 
{ 
    ['{2933BF8B-7B36-11D2-B20E-00C04F983E60}'] 
    string Get_name(); 
    ... 
    property String name read Get_name; 
} 

IXMLDOMDocument60.doctypeがある読み取り専用:そのIXMLDOMDocumentType.name除い

IXMLDOMDocument60 doc = new DOMDocument60(); 
doc.doctype.name = "html"; 

読み取り専用です

IXMLDOMDocument = interface(IXMLDOMNode) 
{ 
    ['{2933BF81-7B36-11D2-B20E-00C04F983E60}'] 
    IXMLDOMDocumentType Get_doctype(); 
    ... 
    property IXMLDOMDocumentType doctype read Get_doctype; 
} 

XML文書のdoctypeはどうすれば設定できますか?


ボーナス質問:どのように私は指定されたdoctypeDOMDocument60オブジェクトを作成ことができますか?


注:何もありませんので、あなたは、XSLTの言及を見ていません。私はMSXMLでHTML DOMツリーを構築しています。

+0

あなたが使用することができます 'loadXML( "の<?xml version =" 1.0" エンコード= "UTF-8"?><!DOCTYPEのroot_elementシステム "DTD_location">」)'をし、そこから行きます... – manuell

答えて

1

perfomance reasonssecurity reasonsについては、Microsoftは通常<!DOCTYPE>(別名Document Type Definition)を許可しません。このため、メソッドを使用して<!DOCTYPE>を設定する必要があります。したがって、文書が作成またはインポートされた後は設定できません。

デフォルトのセキュリティ設定がMSXML6であるため、通常は<!DOCTYPE>のXMLをインポートできません。したがって、オブジェクトのProhibitDTD設定を無効にする必要があります。

編集:あなたはHTML5 is not XMLを知っているはずです。また、<!DOCTYPE>considered optional for XHTML5です。

まず、目的の出力から始めましょう。

<!DOCTYPE html> 
<html /> 

構文に基づいて、私はあなたがC#を使用していると仮定しているとmsxml6.dllへの参照を追加しました。次のコードでは、これら2つの処理命令を作成することができます。

MSXML2.DOMDocument60 doc = new MSXML2.DOMDocument60(); 

// Disable validation when importing the XML 
doc.validateOnParse = false; 
// Enable the ability to import XML that contains <!DOCTYPE> 
doc.setProperty("ProhibitDTD", false); 
// Perform the import 
doc.loadXML("<!DOCTYPE html><html />"); 
// Display the imported XML 
Console.WriteLine(doc.xml); 

ここにはVBScriptで書かれたコードのコピーもあります。

Set doc = CreateObject("MSXML2.DOMDocument.6.0") 

' Disable validation when importing the XML 
doc.validateOnParse = False 
' Enable the ability to import XML that contains <!DOCTYPE> 
doc.setProperty "ProhibitDTD", false 
' Perform the import 
doc.loadXML "<!DOCTYPE html><html />" 
' Display the imported XML 
WScript.Echo objXML.xml 

最後に、C++で書かれたコードのコピーです。

#include <stdio.h> 
#include <tchar.h> 
#include <msxml6.h> 
#import <msxml6.dll> 
#pragma comment(lib, "msxml6.lib") 

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    HRESULT hr; 
    // IXMLDOMDocument2 is needed for setProperty 
    MSXML2::IXMLDOMDocument2 *doc; 

    // Initialize COM 
    hr = CoInitialize(NULL); 
    if (SUCCEEDED(hr)) 
    { 
     // Create the object 
     hr = CoCreateInstance(CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument2, (void**)&doc); 
     if (SUCCEEDED(hr)) 
     { 
      // Disable validation when importing the XML 
      doc->validateOnParse = VARIANT_FALSE; 
      // Enable the ability to import XML that contains <!DOCTYPE> 
      doc->setProperty(_bstr_t(L"ProhibitDTD"), VARIANT_FALSE); 
      // Perform the import 
      doc->loadXML(_bstr_t(L"<!DOCTYPE html><html />")); 
      // Display the imported XML 
      MessageBox(NULL, doc->xml, NULL, 0); 
     } 
     // Cleanup COM 
     CoUninitialize(); 
    } 
    return 0; 
} 
関連する問題