none
MSXML组件解析带默认命名空间的XML时,selectSingleNode无法获取指定的元素 RRS feed

  • 问题

  • 求教使用MSXML组件解析XML时发现的一个问题:

     

    XML中包含的默认命名空间,导致selectSingleNode无法获取指定的元素,只要删掉默认命名空间结果就正常。

     

    XML如下:

    <?xml version="1.0"?>
    <xslTongue Tiedtylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <template id="hello-world" xmlns="http://www.w3.org/2000/09/xmldsig#">
          <HTML>
            <HEAD>
              <TITLE></TITLE>
            </HEAD>
            <BODY>
                <H1><xsl:value-of select="greeting"/></H1>
                <xsl:apply-templates select="greeter"/>
            </BODY>
          </HTML>
      <template>
      <xsl:template match="greeter">
          <DIV>from
              <xsl:value-of select="."/>
          </DIV>
      </xsl:template>
    </xslTongue Tiedtylesheet>

     

    为了定位带命名空间的元素,使用了:

    setProperty("SelectionLanguage", "XPath");和

    setProperty("SelectionNamespaces", "xmlns='http://www.w3.org/2000/09/xmldsig#'");

     

    如果删掉默认命名空间xmlns="http://www.w3.org/2000/09/xmldsig#",就可以正常获取默认命名空间的元素。否则selectNodes(XPath),返回的总是空Node,但枚举XML的全部元素时,都能枚举到。

     

     

     

    2008年12月2日 10:06

答案

  • 楼主,你好! 请先用 浏览器打开 你的xml文件,检查xml文件本身是否有错误!

     

     

    确保你的xml文件正确之后再用selectNodes(XPath).
    2008年12月8日 12:37
    版主
  • 可以这样:指定一个名称空间的别名

    Code Snippet

     

    <script>
    var xmldom = new ActiveXObject("MSXML2.DOMDocument")
    xmldom.async = false;
    xmldom.load("a.xml");
    alert(xmldom.xml)
    xmldom.setProperty("SelectionNamespaces", "xmlns:mxh='http://www.w3.org/2000/09/xmldsig#'");
    xmldom.setProperty("SelectionLanguage", "XPath");
    nodes = xmldom.selectNodes("//mxh:template")
    alert(nodes.length)
    </script>

     

     

    2008年12月8日 12:59
    版主

全部回复

  • 楼主,你好! 请先用 浏览器打开 你的xml文件,检查xml文件本身是否有错误!

     

     

    确保你的xml文件正确之后再用selectNodes(XPath).
    2008年12月8日 12:37
    版主
  • 可以这样:指定一个名称空间的别名

    Code Snippet

     

    <script>
    var xmldom = new ActiveXObject("MSXML2.DOMDocument")
    xmldom.async = false;
    xmldom.load("a.xml");
    alert(xmldom.xml)
    xmldom.setProperty("SelectionNamespaces", "xmlns:mxh='http://www.w3.org/2000/09/xmldsig#'");
    xmldom.setProperty("SelectionLanguage", "XPath");
    nodes = xmldom.selectNodes("//mxh:template")
    alert(nodes.length)
    </script>

     

     

    2008年12月8日 12:59
    版主