【问题标题】:Read / Write XmlDocument with Namespaces使用命名空间读取/写入 XmlDocument
【发布时间】:2011-01-06 13:55:13
【问题描述】:

考虑以下带有命名空间的XmlDocument

<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
  <DataSources>
    <DataSource Name="DummyDataSource">
      <rd:DataSourceID>a0a7ff0a-a268-4f7e-b949-9427e308468a</rd:DataSourceID>
      <ConnectionProperties>
        <DataProvider>SQL</DataProvider>
        <ConnectString />
      </ConnectionProperties>
    </DataSource>
  </DataSources>
</Report>

我写的,

Dim doc As New XmlDocument
doc.Load("c:\MyXml.xml")
Dim nsm As New XmlNamespaceManager(doc.NameTable)
nsm.AddNamespace("", "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition")
nsm.AddNamespace("rd", "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner")
Dim xnd As XmlNode = doc.SelectSingleNode("//DataSources/DataSource/...", nsm)
MessageBox.Show(xnd.Name)

我想读取和修改以下标签(XPath)的值:

  1. //DataSources/DataSource/rd:DataSourceID
  2. //DataSources/DataSource/ConnectionProperties/DataProvider

【问题讨论】:

  • 您遇到了什么问题?什么错误?有哪些例外?
  • 您拥有的代码现在有什么问题?
  • 没有任何效果 我的失败尝试仅供参考。

标签: .net xml vb.net xml-namespaces


【解决方案1】:

我的偏好是使用 LINQ to XML,然后使用正确的 XName 而不是字符串来读取元素。比如:

Dim defaultSpace As XNamespace = XNamespace.Get("http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition")    
Dim firstSource As XElement = doc.Element(defaultSpace + "DataSources").Element(defaultSpace + "DataSource")

【讨论】:

    【解决方案2】:

    您需要使用这些 XPath 格式并包含 namespace-uri() - 这是一个令人头疼的问题:

    //DataSources[namespace-uri()='']/DataSource[namespace-uri()='']/...
    

    【讨论】:

    • -1 我不认为 namespace-uri 是必要的。为默认命名空间定义一个前缀并使用它。
    • 你投反对票只是因为你认为?你的意思是你甚至没有尝试?!
    • 我没有对你投反对票。我现在只打开这个答案。请不要生我的气。请告诉我我现在该怎么办?
    • 是约翰·桑德斯(John Saunders)对我投了反对票,所以并没有真的生你的气——甚至是约翰·桑德斯。这是人们行使的权利,但是当有人这样做,甚至懒得去测试答案时,这是不可接受的。对你来说,试试我的 XPath 看看它是否有效。如果不让我知道,我会更新我的答案或删除它。
    • 尝试并失败。请详细告诉我,怎么做?
    猜你喜欢
    • 2015-07-28
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    相关资源
    最近更新 更多