- PR -

[XML]DTDファイルを用いての検証ができない。

1
投稿者投稿内容
ぺどら
会議室デビュー日: 2006/02/17
投稿数: 14
お住まい・勤務地: かごしま
投稿日時: 2006-02-28 18:51
毎々お世話になっております。

DTD ファイルの設定で XML ファイルの検証を行いたく、
http://support.microsoft.com/default.aspx?scid=kb;ja;307379
に記載されているチュート リアルを VB.NET 2003 にて記述しましたが
うまく動きません。

コード:
    Private isValid As Boolean = True

    Private Sub Form1_Load _
        (ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles MyBase.Load

        Dim xmlReader As New XmlTextReader("Product.xml")
        Dim xmlParser As New XmlValidatingReader(xmlReader)

        xmlParser.ValidationType = ValidationType.DTD
        AddHandler xmlParser.ValidationEventHandler, _
            AddressOf XmlParserEventHandler

        While xmlReader.Read()
            If xmlReader.NodeType = XmlNodeType.Text Then _
               Call MessageBox.Show(xmlReader.Value)
        End While

        Call xmlReader.Close()

        If isValid Then
            Call MessageBox.Show("XML is Valid !!")
        Else
            Call MessageBox.Show("XML is not Valid")
        End If

    End Sub

    Private Sub XmlParserEventHandler _
        (ByVal sender As Object, ByVal e As ValidationEventArgs)

        isValid = False
        Debug.WriteLine("Validation event" & ControlChars.NewLine & e.Message)

    End Sub



以下のコードで、前述したサイトに
引用:

10. Visual Studio .NET で、ProductWithDTD.xml を無効になるように変更します (たとえば、"<ProductName>Rugby jersey</ProductName>" 要素を削除します)。

11. 再びアプリケーションを実行します。次のようなエラー メッセージが表示されます。
Validation event
要素 'Product' には無効な内容が含まれています。'ProductName' を指定してください。
file:///C:/MyFolder/ProductWithDTD.xml(4, 5) でエラーが発生しました。
Document is invalid


とあるのですが、その通りにしても検証OKで通ってしまいます。
XmlParserEventHandler にブレーク ポイントを貼ったのですが、通っていませんでした。

XML とか DTD に触れるのが初めてで、どうにもなりません...
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-02-28 21:07
二つのオブジェクト、自分とパーサーのどちらにハンドラを結び
つけていますか。
ぺどら
会議室デビュー日: 2006/02/17
投稿数: 14
お住まい・勤務地: かごしま
投稿日時: 2006-03-01 09:42
引用:

MMXさんの書き込み (2006-02-28 21:07) より:
二つのオブジェクト、自分とパーサーのどちらにハンドラを結び
つけていますか。



コード:
While xmlReader.Read()


じゃなくて
コード:
While xmlParser.Read()


でした。

思い込みで書いたりするからこうなるワケですね...orz
1

スキルアップ/キャリアアップ(JOB@IT)