我需要从经典asp上的svg文件中获取一个属性。但我的代码不起作用。有什么想法吗?
来自font标签的id属性。
<font id="LetterGothicStdRegular" horiz-adv-x="1228" >
asp功能
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代码:
<?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>
答案 0 :(得分:5)
您可以解析指定svg选择命名空间。
另外,参数名称为 url ,如果是网址,这是否有意义?因为 loadXML 仅从包含xml的字符串加载。如果网址是远程的,您应该使用加载并将ServerHTTPRequest
属性设置为True
。
查看validateOnParse和resolveExternals。这是一个例子:
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
答案 1 :(得分:0)
你可以在你的.LoadXML()语句下面尝试这样的东西吗? (另):
Dim root, xpath, xmlnode, font
Set root = objXml.documentElement
xpath = "/defs/font"
set xmlNode = xml.selectNodes(xpath)
font = xmlNode(0).getAttribute("id")
set xmlNode = Nothing
Set root = Nothing
我注意到了一些事情:
尝试使用.xml或.xmltext响应。编写不同的节点,看看你是否在DOM树的正确部分。