首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XDoc读取xml文件

使用XDoc读取xml文件
EN

Stack Overflow用户
提问于 2013-06-12 23:02:16
回答 1查看 400关注 0票数 1

我正在尝试读取以下文件(部分呈现)

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
 <asmv1:assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd"
 manifestVersion="1.0"
 xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"
 xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"
 xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1"
 xmlns:co.v2="urn:schemas-microsoft-com:clickonce.v2"
 xmlns="urn:schemas-microsoft-com:asm.v2"
 xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
 xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
 xmlns:xrml="urn:mpeg:mpeg21:2003:01-REL-R-NS"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <assemblyIdentity name="program.application" version="4.0.0.27077" publicKeyToken="8f99fe9fddfae125e" language="neutral" processorArchitecture="msil" xmlns="urn:schemas-microsoft-com:asm.v1" />

我有过

代码语言:javascript
复制
Dim manifestFile As String = webClient.DownloadString(location)
Dim xdoc As New Xml.XmlDocument()
xdoc.LoadXml(manifestFile)

我试过了

代码语言:javascript
复制
xdoc.SelectSingleNode("//asmv1:assemblyIdentity")
xdoc.SelectSingleNode("//assemblyIdentity")

Dim nsSys As Xml.XmlNamespaceManager = New Xml.XmlNamespaceManager(xdoc.NameTable)
nsSys.AddNamespace("def", "urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd")
xdoc.SelectSingleNode("//asmv1:assemblyIdentity",ns)
xdoc.SelectSingleNode("//assemblyIdentity",ns)
xdoc.SelectSingleNode("//def:assemblyIdentity",ns)

所有返回的Nothing

选择<assemblyIdentity>节点的正确路径是什么?

注意:我不能使用LinqToXml

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-12 23:34:52

假设我关闭标记文件,如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
    <asmv1:assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns:co.v2="urn:schemas-microsoft-com:clickonce.v2" xmlns="urn:schemas-microsoft-com:asm.v2" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xrml="urn:mpeg:mpeg21:2003:01-REL-R-NS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
       <assemblyIdentity name="program.application" version="4.0.0.27077" publicKeyToken="8f99fe9fddfae125e" language="neutral" processorArchitecture="msil" xmlns="urn:schemas-microsoft-com:asm.v1" />
    </asmv1:assembly>

下面的方法对我很有效:

代码语言:javascript
复制
Dim doc As New XmlDocument()
Dim nsmgr As New XmlNamespaceManager(doc.NameTable)

doc.Load("c:\temp\temp2.xml")
nsmgr.AddNamespace("asmv1", "urn:schemas-microsoft-com:asm.v1")

Dim node As XmlNode = doc.SelectSingleNode("//asmv1:assemblyIdentity", nsmgr)
MessageBox.Show(node.OuterXml)

并返回:

代码语言:javascript
复制
<assemblyIdentity name="program.application" version="4.0.0.27077" publicKeyToken="8f99fe9fddfae125e" language="neutral" processorArchitecture="msil" xmlns="urn:schemas-microsoft-com:asm.v1" />

<assemblyIdentity>节点引用asmv1名称空间,因此需要将其添加到XMLNamespaceManager中

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17068826

复制
相关文章

相似问题

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