xml - 使用带有 XPATH 的 vb.net 读取 XML 属性

标签 xml vb.net xpath xmldocument

我正在尝试创建一个读取 appv list 文件属性的应用程序。我使用 vb.net 2012 作为应用程序。

我想使用 xpath 从 list 文件中读取属性:“VersionId”和“PackageId”,但我无法理解 XPATH 的工作方式。

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns:appv1.1="http://schemas.microsoft.com/appv/2013/manifest" xmlns:appv="http://schemas.microsoft.com/appv/2010/manifest" xmlns="http://schemas.microsoft.com/appx/2010/manifest" appv:IgnorableNamespaces="appv1.1" IgnorableNamespaces="appv appv1.1">
<Identity appv:VersionId="79cdb3a0-8f7d-416d-828e-003fe3125eb2" appv:PackageId="64ce44eb-5255-4514-bb74-e14ae393ae9a" Version="0.0.0.4" Publisher="CN=Reserved" Name="Reserved"/>

这是我现在拥有的:

Dim xml As New XmlDocument
xml.Load(xmlFileName)
Dim nsmgr As New XmlNamespaceManager(xml.NameTable)
nsmgr.AddNamespace("appv", "http://schemas.microsoft.com/appv/2010/manifest")
PackageID = xml.SelectSingleNode("//Package/Identity[@name='appv:PackageId']", nsmgr).InnerText
VersionID = xml.SelectSingleNode("//Package/Identity[@name='appv:VersionId']'", nsmgr).InnerText

请帮忙..这让我完全疯了..

最佳答案

默认命名空间不是空白,因此您必须在 XPath 表达式中为默认命名空间定义和使用显式命名空间前缀。例如:

Dim xml As New XmlDocument
xml.Load(xmlFileName)
Dim nsmgr As New XmlNamespaceManager(xml.NameTable)
nsmgr.AddNamespace("appv", "http://schemas.microsoft.com/appv/2010/manifest")
nsmgr.AddNamespace("appx", "http://schemas.microsoft.com/appx/2010/manifest")
PackageID = xml.SelectSingleNode("//appx:Package/appx:Identity[@name='appv:PackageId']", nsmgr).InnerText
VersionID = xml.SelectSingleNode("//appx:Package/appx:Identity[@name='appv:VersionId']'", nsmgr).InnerText

换句话说,XML 文档中没有命名空间前缀意味着“默认命名空间”,而 XPath 查询中没有命名空间前缀意味着“空白命名空间”。

关于xml - 使用带有 XPATH 的 vb.net 读取 XML 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23605180/

相关文章:

android - 如何创建三角形自定义形状android

java - 在Android Studio-3.6.2中离线安装gradle

vb.net - 为什么一个又一个: UBound or Length

xpath - 如何使用 xpath 在 html 代码中查找和选择表格

java - 如何在 Java 中使用 Selenium WebDriver 上传不同的文件名和最新的日期/时间戳

c# - XSD2Code 类需要包含元素集合的重名元素

c# - 如何选择 XML 节点? (使用 LINQ、XPath,什么都可以)

mysql - 在 Entity Framework 6 中左联接

c# - Visual Studio 改变了 Ctrl-K-D 的工作方式

xml - XSLT 1.0 获取不同值失败