XMLDocument使用带有命名空间的XPATH选择节点

时间:2012-11-22 11:18:11

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

 <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的{​​{1}}?我试过下面的代码,但没有成功。

msdata:IsDataSet

2 个答案:

答案 0 :(得分:0)

IsDataSet是一个属性,因此对于您的XPath,您需要descendant::xs:element[@msdata:IsDataSet]选择属性所在的元素,或descendant::xs:element[@msdata:IsDataSet = 'true']选择那些属性值为{{1}的元素}}

答案 1 :(得分:0)

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

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