2014-05-12 1 views
2

appv 매니페스트 파일의 속성을 읽는 응용 프로그램을 만들려고합니다. 나는 응용 프로그램을 위해 vb.net 2012를 사용합니다.XPATH로 vb.net을 사용하여 XML 속성 읽기

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 

이 도와주세요은 완전히 날 미치게 ... 당신이 정의하고를 사용해야합니다

답변

1

기본 네임 스페이스가 비어 있지 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 쿼리에 네임 스페이스 접두사가없는 반면 "기본 네임 스페이스를"의미 .

1

거기에 문제의 커플 (또한 방금 요소가 닫지 않는 한 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).Value