我正在尝试创建一个读取 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/