我试图创建一个读取appv清单文件属性的应用程序。我在应用程序中使用了vb.net 2012。
我想使用xpath从清单文件中读取属性:'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请帮忙..。它把我逼疯了。
发布于 2014-05-12 09:20:20
默认命名空间不是空白,因此必须为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查询中没有名称空间前缀意味着“空白命名空间”。
发布于 2014-05-12 09:28:04
有几个问题(也假设您刚刚剪下了Xml示例,因为元素没有关闭)
Package (因此也是Identity)位于xmlns "http://schemas.microsoft.com/appx/2010/manifest"中-您将需要另一个名称空间。
nsmgr.AddNamespace("def", "http://schemas.microsoft.com/appx/2010/manifest")另外,您的属性xpath看起来不正确。抓取属性的值,如:
PackageID = xml.SelectSingleNode("//def:Package/def:Identity/@appv:PackageId",
nsmgr).Value
PackageID = xml.SelectSingleNode("//def:Package/def:Identity/@appv:VersionId",
nsmgr).Valuehttps://stackoverflow.com/questions/23605180
复制相似问题