سؤال

 <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>

On above xml, how can I select xs:element with attribute msdata:IsDataSet ? I tried below code but no success.

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)
هل كانت مفيدة؟

المحلول 2

The problem was somewhere else. While reading XML from file to memory, it includes "&lt;" and "&gt;" instead of "<" and ">" for some inner nodes strangely.

I replaced these and the problem is gone.

نصائح أخرى

IsDataSet is an attribute so for your XPath you need descendant::xs:element[@msdata:IsDataSet] to select those elements where the attribute is present or descendant::xs:element[@msdata:IsDataSet = 'true'] to select those elements where that attribute has the value true.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top