• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 659
  • Last Modified:

DTD Reference from a DOMDocument

Here's one for you MSXML gurus.

I am creating an XML file using the DOMDocument object in VB, building nodes, but I can't figure out how to reference a DTD so that MyXMLDOMDocument.xml gives me back the <!DOCTYPE> node.   Anyone know how to
1.) Reference a DTD from the DOM
2.) Create a node that references the DTD from the DOM

Thanks all!
0
hvest
Asked:
hvest
  • 5
  • 4
  • 2
  • +1
1 Solution
 
LunchyCommented:
You posted this question twice.  Just to let you know I deleted the duplicate.

Lunchy
Community Support Moderator
0
 
mattykCommented:
Have you taken a look at the doctype property?  So for a sample xml like:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

the following code would give me note:

Dim objXML As New MSXML2.DOMDocument
objXML.Load ("E:\ee.xml")
debug.print(objXML.doctype.basename)
debug.print(objXML.doctype.xml)

-matty


0
 
hvestAuthor Commented:
Unfortunately, I don't have an xml file to load...I am actually building the XML on the fly using the XMLDOM and SQL data.  Thus I need to reference the DTD in the DOM so that MyDOMDocument.xml would yield:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<blah></blah>

I can do everything but the <!Doctype> node.

Basically I either need to set the doctype property of my DOMDocument (but doctype is read-only), or reference an external DTD from inside of my DOMDocument
0
Cloud Class® Course: SQL Server Core 2016

This course will introduce you to SQL Server Core 2016, as well as teach you about SSMS, data tools, installation, server configuration, using Management Studio, and writing and executing queries.

 
mattykCommented:
Well I came across this:


which hints that the only way to accomplish this is to take your current xml , convert it to a string, add the <!Doctype> node and then reload the string back into the DOMDocument object.

http://www.vbxml.com/xml/articles/dom_xml_prog/default-19.asp?printerversion=true

-matty
0
 
Dave_GreeneCommented:
Why not, when you first create the DOM create it by adding a string... then you can append the desired nodes

Dim objXML As New MSXML2.DOMDocument

strTemp = "<?xml version='1.0'?><!DOCTYPE note SYSTEM 'note.dtd'>"


objXML.xml = strTemp
0
 
hvestAuthor Commented:
I wonder if there is any other way?  I haven't been able to find one yet...
0
 
hvestAuthor Commented:
That's a good suggestion Dave, but .xml is a read-only property
0
 
Dave_GreeneCommented:
It's been a couple of months since I've worked with it, just found your question... I'll see what I can come up with...
0
 
Dave_GreeneCommented:
Ok, here it is...  Another unfortunate limitation of XML & DTDs.  As far as accomplishing what you want in code, you will need to create a text file programmatically with your version / DTD info...

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">

Then you will need to load this file into your DOM

objDOM.load "C:\Temp\temp.xml"

Then append your nodes as needed.

There is no easy way around this one.

It would be nice if it worked like Matty and I initially thought (Build the string and pop it into the DOM), but no beans.

Hope this helps!

-Dave
0
 
hvestAuthor Commented:
Thanks Dave!  Looks like I just got the short end of the stick on this problem...gonna have to go with the work-around
0
 
Dave_GreeneCommented:
Just one last note,

When using an internal DTD you do not need to define SYSTEM OR PUBLIC  ...  or an external file name...

Just

<!DOCTYPE note>

Cheers
0
 
Dave_GreeneCommented:
And of course...

Whatever DTD elements

<!DOCTYPE note[
    <!-- this is where the internal DTD subset is located. -->
  ]>
  <note>

Have a good one!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 5
  • 4
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now