- - PR -
【XML】 LoadXmlでXML文書のチェック
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-08-08 15:48
XmlDocumentクラスのLoadメソッドでは、ValidationがReaderで可能ですが、LoadXmlではできません。
Validationを行おうとすると、一旦ファイルに保存後Readerを使用して行えばいいのでしょうか。 また、タグの記述ミス(たとえば、終端の>が>>になっていた場合)は、 Readerを用いたValidationでチェック可能でしょうか。 LoadXmlメソッドではエラーになりませんでした。 | ||||||||
|
投稿日時: 2005-08-08 16:18
>LoadXmlメソッドではエラーになりませんでした。
仕様です。 .NET Framework クラス ライブラリ XmlDocument.LoadXml メソッド 解説 既定では、 LoadXml メソッドは空白も有意な空白も保存しません。このメソッドは、DTD 検証またはスキーマ検証を実行しません。検証を実行する場合は、 Load メソッドを使用し、そのメソッドに XmlValidatingReader を渡します。読み込み時検証の例については、「 XmlDocument 」を参照してください。 ------- ヘルプより | ||||||||
|
投稿日時: 2005-08-09 01:33
返信有難うございます。
やはり一旦ファイルに保存する以外に方法はなさそうですね。 | ||||||||
|
投稿日時: 2005-08-09 01:51
XmlValidatingReaderやXmlTextReaderのコンストラクタを調べればXML文字列から作成する手法も見つかりますが。
| ||||||||
|
投稿日時: 2005-08-09 17:15
すみません。見落としていました。
確かにコンストラクタで指定できました。 public XmlValidatingReader(string, XmlNodeType, XmlParserContext); | ||||||||
|
投稿日時: 2005-08-12 08:39
何度もすみません。
以下のコードを書いて見たのですが、 例外は発生しませんでした。 Dim strXML As String = "<BookStore Prefecture=""27"" xmlns=""Book"">" & _ "<Store ID=""2000"">" & _ "<Order ID=""00010001"">XXXXX</Order>>" & _ "<Order ID=""00010002"">yyyyy</Order>" & _ "</Store>" & _ " </BookStore>" Dim reader As XmlValidatingReader = Nothing Dim bSuccess = False Dim strX As String Dim strXML = " Try 'Create the XmlNamespaceManager that is used to 'look up namespace information. Dim nt As New NameTable Dim nsmgr As New XmlNamespaceManager(nt) nsmgr.AddNamespace(String.Empty, "urn:Book") 'Create the XmlParserContext. Dim context As New XmlParserContext(Nothing, nsmgr, Nothing, XmlSpace.None) 'Implement the reader. reader = New XmlValidatingReader(strXML, XmlNodeType.Element, context) reader.ValidationType = ValidationType.None 'Parse the XML fragment. If they exist, display the 'prefix and namespace URI of each element. While reader.Read() strX = reader.Name Trace.Write(strX + vbCrLf) End While bSuccess = True Catch ex As Exception MessageBox.Show("Error") Finally If Not (reader Is Nothing) Then reader.Close() End If End Try 多分僕がValidationReader等の知識がないからだと思うのですが、 どのようにして上記のXMLが間違っているという解析をすればいいかわかりません。 | ||||||||
|
投稿日時: 2005-08-12 09:16
>reader.ValidationType = ValidationType.None
ValidationType=ValidationType。無 とは? None XML 1.0 準拠の非検証パーサーを作成します。既定の属性が報告され、一般エンティティは ResolveEntity を呼び出して解決できます。DOCTYPE は、検証目的では使用されません。 検証エラーはスローされません。 ---- ヘルプより 掲示板書き込みして、待つ時間が好きなタイプですか?(細木数子より、穏やかな口調) | ||||||||
|
投稿日時: 2005-08-12 09:27
ひょっとして</Order>>のこの>二つ目を検出したいのでしょうか? ValidationTypeがNoneである以上、Validationは行われません。読み込んでもvalidかどうかは保証されません(何に対してvalidか、と言うところから不明ですし)。 またwell-formedかどうかは、別にXmlValidatingReaderでなくとも、XmlTextReaderであっても検証されます(well-formedでなければ読み込み時に例外が発生します)。 XMLにおいて、>は別にテキストノードに使っちゃいけない文字ではありません。 ですからこのXMLはwell-formedです。例外は発生しません。 |