首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用vb.net读取XML属性

用vb.net读取XML属性
EN

Stack Overflow用户
提问于 2014-05-12 09:15:51
回答 2查看 826关注 0票数 3

我试图创建一个读取appv清单文件属性的应用程序。我在应用程序中使用了vb.net 2012。

我想使用xpath从清单文件中读取属性:'VersionId‘和'PackageId’,但是我无法理解XPATH的工作方式。

代码语言:javascript
运行
复制
<?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"/>

这就是我现在拥有的:

代码语言:javascript
运行
复制
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

请帮忙..。它把我逼疯了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-12 09:20:20

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

代码语言:javascript
运行
复制
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查询中没有名称空间前缀意味着“空白命名空间”。

票数 1
EN

Stack Overflow用户

发布于 2014-05-12 09:28:04

有几个问题(也假设您刚刚剪下了Xml示例,因为元素没有关闭)

Package (因此也是Identity)位于xmlns "http://schemas.microsoft.com/appx/2010/manifest"中-您将需要另一个名称空间。

代码语言:javascript
运行
复制
nsmgr.AddNamespace("def", "http://schemas.microsoft.com/appx/2010/manifest")

另外,您的属性xpath看起来不正确。抓取属性的值,如:

代码语言:javascript
运行
复制
PackageID = xml.SelectSingleNode("//def:Package/def:Identity/@appv:PackageId", 
                                 nsmgr).Value
PackageID = xml.SelectSingleNode("//def:Package/def:Identity/@appv:VersionId", 
                                 nsmgr).Value
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23605180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档