【问题标题】:XMLDocument Select Nodes using XPATH with namespacesXMLDocument 使用带有命名空间的 XPATH 选择节点
【发布时间】:2012-11-10 18:51:36
【问题描述】:
 <GetDataSetResult>
        <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
          <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
            <xs:complexType>
              <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element name="MyTable">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="myColumn" type="xs:string" minOccurs="0" />
                    </xs:sequence>
                  </xs:complexType>
                </xs:element>
              </xs:choice>
            </xs:complexType>
          </xs:element>
        </xs:schema>
        <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
          <NewDataSet xmlns="">
            <MyTable diffgr:id="MyTable1" msdata:rowOrder="0">
              <myColumn>Ahmet</myColumn>
            </MyTable>
            <MyTable diffgr:id="MyTable2" msdata:rowOrder="1">
              <myColumn>Ali</myColumn>
            </MyTable>
            <MyTable diffgr:id="MyTable3" msdata:rowOrder="2">
              <myColumn>Veli</myColumn>
            </MyTable>
            <MyTable diffgr:id="MyTable4" msdata:rowOrder="3">
              <myColumn>Osman</myColumn>
            </MyTable>
            <MyTable diffgr:id="MyTable5" msdata:rowOrder="4">
              <myColumn>Mahmut</myColumn>
            </MyTable>
            <MyTable diffgr:id="MyTable6" msdata:rowOrder="5">
              <myColumn>Memed</myColumn>
            </MyTable>
          </NewDataSet>
        </diffgr:diffgram>
      </GetDataSetResult>

在上面的 xml 中,如何选择 xs:element 属性为 msdata:IsDataSet ?我尝试了下面的代码,但没有成功。

Dim doc As New XmlDocument()
doc.Load("test.xml")
Dim root As XmlNode = doc.DocumentElement

Dim nsmgr As New XmlNamespaceManager(doc.NameTable)
nsmgr.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema")
nsmgr.AddNamespace("msdata", "urn:schemas-microsoft-com:xml-msdata")

Dim node As XmlNode = root.SelectSingleNode( _
     "descendant::xs:element[msdata:IsDataSet]", nsmgr)
Console.WriteLine(node.InnerXml)

【问题讨论】:

    标签: .net xpath vb.net-2010 xmldocument selectnodes


    【解决方案1】:

    IsDataSet 是一个属性,因此对于您的 XPath,您需要descendant::xs:element[@msdata:IsDataSet] 来选择存在该属性的那些元素,或者使用descendant::xs:element[@msdata:IsDataSet = 'true'] 来选择那些该属性的值为 true 的元素。

    【讨论】:

      【解决方案2】:

      问题出在其他地方。 在将 XML 从文件读取到内存时,奇怪的是,对于某些内部节点,它包含 "&amp;lt;""&amp;gt;" 而不是 "&lt;""&gt;"

      我更换了这些,问题就消失了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-06
        • 2013-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多