parse a svg xml with asp
asp-classic, svg, xml, xml-parsing
Solution
You can parse specifying svg selection namespace. Plus, the parameter name is url, this make sense if it's a url? Because loadXML loads only from a string containing xml. You should use Load with setting `ServerHTTPRequest` property to `True` if url is remote. Check out validateOnParse and resolveExternals. Here's an example:
Function getFontId(url)
With Server.CreateObject("MSXML2.DomDocument.6.0")
.async = False
.validateOnParse = False 'parse only for well-formed xml, no more
.resolveExternals = False
.setProperty "ServerHTTPRequest", True
.setProperty "ProhibitDTD", False ' it's true by default in 6.0
If .Load(url) Then
.setProperty "SelectionNamespaces", "xmlns:svg='http://www.w3.org/2000/svg'"
Dim domAttrId
Set domAttrId = .selectSingleNode("//svg:defs/svg:font/@id")
If domAttrId Is Nothing Then
'node nor attribute not exists
Else
getFontId = domAttrId.Value
End If
Else
With .parseError
Err.Raise .errorCode, .srcText, .reason
End With
End If
End With
End Function
Problem
I need to get an attribute from svg file on classic asp. But my code don't work. Any idea? id attribute from font tag. ``` <font id="LetterGothicStdRegular" horiz-adv-x="1228" > ``` asp function ``` function getFontId(url) Set objXml = Server.CreateObject("MSXML2.DomDocument.6.0") 'objXml.async = False objXml.LoadXML(url) For Each oNode In objXml.SelectNodes("svg/defs/font") sKey = oNode.GetAttribute("id") ' sValue = oNode.Text getXML=sKey Next Set objXml= Nothing end function ``` svg code: ``` <?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg xmlns="http://www.w3.org/2000/svg"> <metadata>This is a custom SVG webfont generated by Font Squirrel. Copyright : 1987 1990 1991 1995 1998 2001 2002 Adobe Systems Incorporated All rights reserved Foundry : Adobe </metadata> <defs> <font id="LetterGothicStdRegular" horiz-adv-x="1228"> <font-face units-per-em="2048" ascent="1520" descent="-528"/> <missing-glyph horiz-adv-x="500"/> <glyph unicode="2" horiz-adv-x="1783" d="M149 1099l66 51l672 -696l671 696l66 -51l-737 -776z"/> <glyph unicode="8" horiz-adv-x="1783" d="M167 430l737 776l738 -776l-66 -51l-672 696l-671 -696z"/> <glyph unicode="<" d="M201 737l776 738l51 -66l-696 -672l696 -671l-51 -66z"/> <glyph unicode=">" d="M288 66l696 671l-696 672l51 66l776 -738l-776 -737z"/> <glyph unicode=" " horiz-adv-x="737"/> <glyph unicode=" " horiz-adv-x="1475"/> <glyph unicode=" " horiz-adv-x="737"/> <glyph unicode=" " horiz-adv-x="1475"/> <glyph unicode=" " horiz-adv-x="491"/> <glyph unicode=" " horiz-adv-x="368"/> <glyph unicode=" " horiz-adv-x="245"/> <glyph unicode=" " horiz-adv-x="245"/> <glyph unicode=" " horiz-adv-x="184"/> <glyph unicode=" " horiz-adv-x="295"/> <glyph unicode=" " horiz-adv-x="81"/> <glyph unicode=" " horiz-adv-x="295"/> <glyph unicode=" " horiz-adv-x="368"/> <glyph unicode="" horiz-adv-x="500" d="M0 0v0v0v0v0z"/> </font> </defs> </svg> ```