簡體   English   中英

在 VB.NET 和 XML 中使用帶有 XPath 的命名空間

[英]Use namespaces with XPath in VB.NET with XML

我正在嘗試使用 VB.NET 中的 XML select 一個特定的<Relationships>節點。 發生的問題是,使用我的設置 XPath,我收到錯誤:

需要命名空間管理器或 XsltContext。 此查詢具有前綴、變量或用戶定義的 function。

這是我使用的 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 中。 有沒有人現在如何解決這個問題和 select <Relationships>節點?

在處理 XML API 時最好使用 LINQ 到 XML API 它可以使用十多年。

VB.NET

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)

您需要添加一個命名空間前綴,如下所示。

VB.NET

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM