加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

用asp解析svg xml

发布时间:2020-12-16 06:24:28 所属栏目:asp.Net 来源:网络整理
导读:我需要在经典的asp上从svg文件中获取一个属性.但我的代码不起作用.任何的想法? 来自font标签的id属性. font id="LetterGothicStdRegular" horiz-adv-x="1228" asp功能 function getFontId(url)Set objXml = Server.CreateObject("MSXML2.DomDocument.6.0")'
我需要在经典的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="&#x3c;" d="M201 737l776 738l51 -66l-696 -672l696 -671l-51 -66z"/>
            <glyph unicode="&#x3e;" d="M288 66l696 671l-696 672l51 66l776 -738l-776 -737z"/>
            <glyph unicode="&#x2000;" horiz-adv-x="737"/>
            <glyph unicode="&#x2001;" horiz-adv-x="1475"/>
            <glyph unicode="&#x2002;" horiz-adv-x="737"/>
            <glyph unicode="&#x2003;" horiz-adv-x="1475"/>
            <glyph unicode="&#x2004;" horiz-adv-x="491"/>
            <glyph unicode="&#x2005;" horiz-adv-x="368"/>
            <glyph unicode="&#x2006;" horiz-adv-x="245"/>
            <glyph unicode="&#x2007;" horiz-adv-x="245"/>
            <glyph unicode="&#x2008;" horiz-adv-x="184"/>
            <glyph unicode="&#x2009;" horiz-adv-x="295"/>
            <glyph unicode="&#x200a;" horiz-adv-x="81"/>
            <glyph unicode="&#x202f;" horiz-adv-x="295"/>
            <glyph unicode="&#x205f;" horiz-adv-x="368"/>
            <glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0v0v0v0v0z"/>
        </font>
    </defs>
</svg>

解决方法

您可以解析指定svg选择命名空间.
另外,参数名称是url,如果它是url,这是有意义的吗?因为loadXML仅从包含xml的字符串加载.如果url是远程的,则应该使用Load将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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读