当根节点和元素具有不同的名称空间属性时的XPath

时间:2010-06-08 13:13:29

标签: vb.net xpath

我在VB.Net中遇到了一个问题,即获取XML元素的Xpath,如下所示:

<Parent xmlns:"http://www.sample.com">    
   <body>      
       <Child xmlns:"http://www.notsample.com">

           <element type="xyz"> ghghghghghg </element> 

       </Child>    
   </body>
</Parent>

我需要使用VB.Net NameSpace Manager

在上面的XML中使用“元素”的Xpath

对于我已完成的“body”节点及其工作但我无法对“element”执行相同的操作:

dim bodynode as XMLNode=XML.SelectSingleNode(//ns:body,nsmngr)

其中“nsmngr”是由我创建的命名空间管理器,“ns”是“父节点”(“body”节点继承)的名称空间,添加到命名空间管理器中为“ns”

由于 基兰

2 个答案:

答案 0 :(得分:1)

构建所需的XPath表达式有两种不同的方法

  1. 使用NamespaceManager定义第二个名称空间绑定,例如ns2:绑定到http://www.notsample.com。然后使用:
  2. /*/ns:body/ns2:Child/ns2:element

    1. 根本不使用名称空间
    2. /*/*[name()='body']/*[name()='Child']/*[name()='element']

答案 1 :(得分:0)

给出以下xml:

<OuterElem  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:test="http://www.w3.org/2001/XMLSchema-instance1" xmlns:test1="http://www.w3.org/2001/XMLSchema-instance1">
<test:parent>
    <test1:child1>blabla1</test1:child1>
    <test1:child2>blabla2</test1:child2>
    <test:child2>blabla3</test:child2>
</test:parent>
<test1:child1>blabla4</test1:child1>
</OuterElem>   

以下xslt(xslt 1.0)复制除“test:parent / test1:child1”之外的所有节点:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:test="http://www.w3.org/2001/XMLSchema-instance1" xmlns:test1="http://www.w3.org/2001/XMLSchema-instance1">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
        <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="test:parent/test1:child1"/>
</xsl:stylesheet>

结果将是:

<OuterElem xmlns:test="http://www.w3.org/2001/XMLSchema-instance1" xmlns:test1="http://www.w3.org/2001/XMLSchema-instance1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <test:parent>
        <test1:child2>blabla2</test1:child2>
        <test:child2>blabla3</test:child2>
    </test:parent>
    <test1:child1>blabla4</test1:child1>
</OuterElem>