【问题标题】:ASP Classic - Parse XML InnerXMLASP Classic - 解析 XML InnerXML
【发布时间】:2012-04-30 04:57:48
【问题描述】:

我喜欢像 asp.net 那样解析值,不幸的是 asp classic 也返回像 <div>everything within it</div> 标签这样的标签。

我正在尝试解析路径“/root/div”并返回其中的所有内容,不包括“<div></div>”,结果应该是“<p>abc <span>other span</span></p>

<%
    Set CurrentXML=Server.CreateObject("Microsoft.XMLDOM")
    CurrentXML.LoadXml("<root><div><p>abc <span>other span</span></p></div></root>")'Load string into CurrentXML

    Response.Write("<BR>"&Server.HTMLEncode(CurrentXML.SelectSingleNode("/root/div").XML)) 'I want to return  without the div, the correct result should be <p>abc <span>other span</span></p>
 %>

【问题讨论】:

    标签: asp-classic


    【解决方案1】:

    试试这个:

    <%
    Option Explicit
    
        Dim xml: Set xml = Server.CreateObject("MSXML2.DOMDocument.3.0") 
        xml.LoadXml("<root><div>Text Start<p>abc <span>other span</span></p></div></root>")
    
        Dim sResult: sResult = ""
    
        Dim node
        For Each node in xml.selectSingleNode("/root/div").childNodes
            sResult = sResult & node.xml
        Next
    
        Response.Write Server.HTMLEncode(sResult) 
    
    %>
    

    不幸的是,MSXML DOM 元素没有 innerXml 属性。因此,您需要循环连接每个子节点的 xml 以生成元素的内部 XML。

    【讨论】:

      【解决方案2】:

      这应该会为您提供所需的内容:

      Response.Write("BR>"&Server.HTMLEncode(CurrentXML.SelectSingleNode("/root/div").childNodes.item(0).XML))
      

      我不确定你的确切情况,但你可能想在假设之前确保你有子节点,你可以这样做:

      CurrentXML.SelectSingleNode("/root/div").hasChildNodes ' Should be "True"
      

      祝你好运!

      【讨论】:

      • 这种方法仅适用于“div”中包含的 HTML 片段仅包含一个 xml 子节点的情况。请参阅我的答案,其中我注入了一个案例,其中还有一个松散的文本节点。
      • 您好,感谢您的关注。你说得对,我以具体的 XML 为例进行了回答,应该考虑到这一点。
      • 谢谢大家,Adi 简单的解决方案解决了我的问题。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2015-09-17
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 2013-01-22
      • 2016-02-11
      相关资源
      最近更新 更多