首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在XPath中使用VB.NET中的命名空间

在XPath中使用VB.NET中的命名空间
EN

Stack Overflow用户
提问于 2019-09-22 16:36:11
回答 2查看 500关注 0票数 0

我试图在<Relationships>中选择一个具有XML的特定VB.NET节点。问题是,对于我的集合XPath,我得到了错误:

名称空间管理器或XsltContext需要。此查询具有前缀、变量或用户定义的函数.

这是我使用的XPath:

代码语言:javascript
复制
Dim parentNode As XmlNode = myXmlDocument.SelectSingleNode("/pkg:package/pkg:part[@pkg:name='/_rels/.rels']/pkg:xmlData/Relationships[@xmlns='http://schemas.openxmlformats.org/package/2006/relationships']")

据我所知,您应该添加一个命名空间管理器,我尝试过这样做。然而,我混淆了我所见过的所有定义和示例,因此我无法使用代码:

代码语言:javascript
复制
Dim namespaceManager As XmlNamespaceManager = New XmlNamespaceManager(myXmlDocument.NameTable)
namespaceManager.AddNamespace("xmlns:pkg", "http://schemas.microsoft.com/office/2006/xmlPackage")
namespaceManager.AddNamespace("xmlns", "http://schemas.openxmlformats.org/package/2006/relationships")

上面的代码在我要添加的第二个名称空间中导致了以下错误:

前缀"xmlns“保留给XML使用。

我的XML文件如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="PowerPoint.Show"?>
<pkg:package
    xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage">
    <pkg:part pkg:name="/_rels/.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="512">
        <pkg:xmlData>
            <Relationships
                xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
                <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
                <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
                <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="ppt/presentation.xml"/>
            </Relationships>
        </pkg:xmlData>
    </pkg:part>
</pkg:package>

我不明白您应该如何在VB.NET中使用这些名称空间并将它们不关联到您的XPath中。现在有谁能解决这个问题并选择<Relationships>节点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-22 18:16:00

在处理XML时使用要好得多。它已经有十多年了。

VB.NET

代码语言:javascript
复制
Dim myXmlDocument As XDocument = XDocument.Load("e:\temp\package.xml")

Dim ns0 As XNamespace = "http://schemas.microsoft.com/office/2006/xmlPackage"
Dim ns1 As XNamespace = "http://schemas.openxmlformats.org/package/2006/relationships"


Dim Relationships As XElement = myXmlDocument.Descendants(ns1 + "Relationships").FirstOrDefault()

Console.WriteLine(Relationships)
票数 1
EN

Stack Overflow用户

发布于 2019-09-22 16:58:30

您需要添加一个名称空间前缀,如下所示。

VB.NET

代码语言:javascript
复制
Dim namespaceManager As XmlNamespaceManager = New XmlNamespaceManager(myXmlDocument.NameTable)
namespaceManager.AddNamespace("xmlns:pkg", "http://schemas.microsoft.com/office/2006/xmlPackage")
namespaceManager.AddNamespace("xmlns:ns1", "http://schemas.openxmlformats.org/package/2006/relationships")

之后,下面的XPath表达式将提供对关系片段的访问。

代码语言:javascript
复制
/pkg:package/pkg:part/pkg:xmlData/ns1:Relationships
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58051280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档