Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > XML > XML parser and javascript function

Reply
Thread Tools

XML parser and javascript function

 
 
Leila
Guest
Posts: n/a
 
      08-11-2004
Hi folks,

I have a fairly complex xml document which looks like this:

<my:InsideView xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2004-08-02T14:22:59"
xml:lang="en-us">
<my:Title>Title in here</my:Title>
<my:StandFirst>Standfirst in here</my:StandFirst>
<my:RelatedMaterial>
<my:Image>/images/InsideView/norma.gif</my:Image>
<my:EmphasisedText>picture of norma</my:EmphasisedText>
<my:AlternateText>alternate text</my:AlternateText>
<mylaceHolderTag>&lt;!-- image one --&gt;</mylaceHolderTag>
</my:RelatedMaterial>
<my:RelatedMaterial>
<my:Image>/images/InsideView/elena.gif</my:Image>
<my:EmphasisedText>another picture of elena</my:EmphasisedText>
<my:AlternateText></my:AlternateText>
<mylaceHolderTag>&lt;!-- image two --&gt;</mylaceHolderTag>
</my:RelatedMaterial>
<my:Body>Main body text for newsletter. I want to place image one in
here so I will use a placeholder, like this &lt;!-- image one --&gt;
to search and replace any of these tags with the image in
<my:image></my:Body>
<my:RelatedLinks>
<my:URL>http://www.google.com</my:URL>
<my:URLText>this is a link to google</my:URLText>
</my:RelatedLinks>
<my:RelatedLinks>
<my:URL>http://www.bbc.co.uk</my:URL>
<my:URLText>this is a link to </my:URLText>
</my:RelatedLinks>
</my:InsideView>

I am want to use my javascript function to load the XML document and
work with the nodes within the document. My aim is to be able to loop
through the <RelatedMaterial> node, and see if any of the tags placed
in <mylaceHolderTag> can be found in the content within <my:Body>.
If a placeholder is found, then I want to replace the placeholder in
<my:Body> with the image in <my:image>.

Quite an ambitious task. Can anybody tell me what is wrong with my
javascript function:

function loadXML(xmlDoc, divName) {

var display;
var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
xmldoc.async = false;
xmldoc.load(xmlDoc);

strBody = xmldoc.getElementsByTagName("Body");

alert(strBody.length); // DISPLAYS 0

alert(strBody[0].firstChild.nodeValue); // error: object expected

myNodes = _XML.getElementsByTagName("RelatedMaterial");

alert(myNodes.length) // displays 0

//Extract the different values using a loop.
for( var counter = 0; counter < myNodes.length; counter++ ) {
display += myNodes.item(counter).firstChild.nodeValue + "\n";
}
alert(display) // error: undefined

document.all.main.innerHTML = display;
}
 
Reply With Quote
 
 
 
 
Martin Honnen
Guest
Posts: n/a
 
      08-11-2004


Leila wrote:


> I have a fairly complex xml document which looks like this:
>
> <my:InsideView xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2004-08-02T14:22:59"
> xml:lang="en-us">
> <my:Title>Title in here</my:Title>
> <my:StandFirst>Standfirst in here</my:StandFirst>
> <my:RelatedMaterial>
> <my:Image>/images/InsideView/norma.gif</my:Image>
> <my:EmphasisedText>picture of norma</my:EmphasisedText>
> <my:AlternateText>alternate text</my:AlternateText>
> <mylaceHolderTag>&lt;!-- image one --&gt;</mylaceHolderTag>
> </my:RelatedMaterial>
> <my:RelatedMaterial>
> <my:Image>/images/InsideView/elena.gif</my:Image>
> <my:EmphasisedText>another picture of elena</my:EmphasisedText>
> <my:AlternateText></my:AlternateText>
> <mylaceHolderTag>&lt;!-- image two --&gt;</mylaceHolderTag>
> </my:RelatedMaterial>
> <my:Body>Main body text for newsletter. I want to place image one in
> here so I will use a placeholder, like this &lt;!-- image one --&gt;
> to search and replace any of these tags with the image in
> <my:image></my:Body>


There is a </my:image> missing here, otherwise the document is not
well-formed.

> <my:RelatedLinks>
> <my:URL>http://www.google.com</my:URL>
> <my:URLText>this is a link to google</my:URLText>
> </my:RelatedLinks>
> <my:RelatedLinks>
> <my:URL>http://www.bbc.co.uk</my:URL>
> <my:URLText>this is a link to </my:URLText>
> </my:RelatedLinks>
> </my:InsideView>


If you have namespaces it is best to use selectSingleNode/selectNodes
after delaring prefixes for the namespaces as in the following example:

var xmlDocument = new ActiveXObject('Msxml2.DOMDocument');
xmlDocument.async = false;
var loaded = xmlDocument.load('test2004081101.xml');
if (loaded) {
xmlDocument.setProperty('SelectionLanguage', 'XPath');
xmlDocument.setProperty('SelectionNamespaces',
'xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2004-08-02T14:22:59"');
var relatedMaterial =
xmlDocument.selectSingleNode('//my:RelatedMaterial');
alert(relatedMaterial);
}

Note that XPath is only supported in MSXML 3 and later thus if you have
IE 5 or IE 5.5 you might need to install MSXML 3 first on such a machine
to make sure you are able to use
xmlDocument.setProperty('SelectionLanguage', 'XPath');
xmlDocument.setProperty('SelectionNamespaces', '...')

--

Martin Honnen
http://JavaScript.FAQTs.com/

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
XML::Parser Installation error: XML-Parser-2.34 Sean Perl Misc 3 10-03-2006 01:23 AM
XML::Parser Installation error: XML-Parser-2.34 Sean Perl Misc 0 10-02-2006 06:20 PM
Different results parsing a XML file with XML::Simple (XML::Sax vs. XML::Parser) Erik Wasser Perl Misc 5 03-05-2006 10:09 PM
XML-Parser to XML-Parser communication (encoding issues?) arne Perl Misc 0 09-13-2005 12:53 PM
XML Parser VS HTML Parser ZOCOR Java 11 10-05-2004 01:58 PM



Advertisments