当前位置: 首页 > 知识库问答 >
问题:

在VB中使用带有XPath的名称空间。NET与XML

东方华荣
2023-03-14

我正在尝试选择一个特定的

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

这是我使用的XPath:

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']")

我知道你应该添加一个名称空间管理器,我试过这么做。然而,我混淆了我看到的所有定义和示例,因此我没有代码:

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文件看起来像这样:

<?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中。现在有人知道如何解决这个问题并选择


共有2个答案

司徒浩思
2023-03-14

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

VB。网

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表达式将提供对关系片段的访问。

/pkg:package/pkg:part/pkg:xmlData/ns1:Relationships
仲孙德惠
2023-03-14

在处理XML时使用LINQ to XML API要好得多。它已经有十多年的历史了。

VB。网

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)
 类似资料:
  • 问题内容: 解决在Java中包含名称空间的xpath似乎需要使用一个对象,将前缀映射到名称空间url,反之亦然。但是,除了自己实现之外,我找不到其他机制。这似乎违反直觉。 问题: 是否有任何简单的方法可以从文档中获取文档,或者创建文档,或者失败文档,以完全放弃前缀并使用完全限定的名称指定xpath? 问题答案: 无需编写自己的类就可以获取 NamespaceContext 实例。它的类使用页面显示

  • 我试图使用名称空间从xml文件中选择一个xml节点。我已经有了一个选项,但第二个选项无法使用。 这是简化的xml(在python代码中存储为BookMetaData): 这是我到目前为止编写的python代码: 我尝试过的不起作用的东西: how-to-use-xpath-from-lxml-on-null-namessped-节点命名空间"http://www.idpf.org/2007/opf

  • 问题内容: 我想获取标记之间的所有内容,但是由于urn:名称空间,我不知道该怎么做。 有任何想法吗? 问题答案: 简短的答案:使用XPath 。这样:将返回 或者,您可以实现一个映射名称空间名称和URI的,并在查询之前在XPath对象上对其进行设置。 看一下这篇博客文章, 更新: 该文章已结束,您可以在webarchive上看到它 解决方案1样本: 解决方案2样本: 编辑 这是一个完整的示例,它可

  • 问题内容: 我正在尝试解析Java中的SOAP请求,但代码未返回任何节点,这里的代码可以使任何人找到错误 问题答案: 您需要设置一个上: 演示版 输出量

  • 问题内容: 我有以下格式的xml文档: 我需要使用lxml中的xpath检索所有元素。我的问题是我不知道如何使用空的名称空间。我尝试了以下示例,但没有用。请指教。 我尝试过的各种方法是: 要么 要么 在这一点上,我只是不知道该尝试什么。任何帮助是极大的赞赏。 问题答案: 这样的事情应该起作用: 另请参见http://lxml.de/xpathxslt.html#namespaces-and- pr

  • 问题内容: 我正在做这个小项目,我的任务是读取xml文件并进行解析,以便可以将其存储在类中。这是xml示例。它是用SOAP编写的,我要做的就是获取 xmlns:ns2="http://abc.examples.com 问题答案: 要使用Java中的命名空间进行XPath查询,我相信您需要执行以下操作: 您还需要先调用;,然后再创建来解析文档。