从XML文件中读出数据?

时间:2012-09-20 06:27:59

标签: c# xml

您好我在读取XML文件的节点时遇到了问题?我无法在XML中找到子节点。此代码找不到节点。如果我改变:

XmlNodeList dataNodes = xmlDoc.SelectNodes("//Properties");

XmlNodeList dataNodes = xmlDoc.SelectNodes("//NewDataSet");

然后我得到两个节点返回我获取属性和requestdata,但我想要属性子节点。

有人可以告诉我为什么我看不到属性的子节点,请帮我找到它们。


这是我的C#代码。

if (File.Exists("C://Users//Shaun//Documents//Visual Studio 2010//Projects//LightStoneTestService//LightStoneTestService//FileTest//Testdo.xml")) //In bin and Debug
    {
    XmlDocument xmlDoc = new XmlDocument();

    xmlDoc.Load("C://Users//Shaun//Documents//Visual Studio 2010//Projects//LightStoneTestService//LightStoneTestService//FileTest//Testdo.xml");

    XmlNodeList dataNodes = xmlDoc.SelectNodes("//Properties");

    foreach (XmlNode node in dataNodes)
      {
        int Count = 0;
        int Max = node.ChildNodes.Count;
        foreach (XmlNode childNode in node.ChildNodes) //For each child node in FieldData
         {
           if (ArrayProperties[Count].LightStoneTag == childNode.Name)
          {
            ArrayProperties[Count].Value = node.SelectSingleNode(ArrayProperties[Count].LightStoneTag).InnerText;
          }
           Count = Count + 1;
         }
      }

这是我的XML文件,我试图读取属性中的所有节点:

  <NewDataSet>
  <RequestData xmlns="RequestData">
    <Req_ID>fe0bc7ab-1dc9-4526-bd29-b522ff13e162</Req_ID>
  </RequestData>
  <Properties xmlns="Properties">
    <sr_id>19374149</sr_id>
    <prop_id>9841107</prop_id>
    <DEED_ID>21</DEED_ID>
    <PROPTYPE_ID>2</PROPTYPE_ID>
    <SS_ID>2315</SS_ID>
    <NAD_ID>3048001</NAD_ID>
    <property_type>SS</property_type>
    <PROVINCE>GA</PROVINCE>
    <MUNICNAME>CITY OF JOHANNESBURG</MUNICNAME>
    <DEEDTOWN>ALLENS NEK</DEEDTOWN>
    <SECTIONAL_TITLE>SS GREENHILLS</SECTIONAL_TITLE>
    <UNIT>15</UNIT>
    <ERF>627</ERF>
    <PORTION>0</PORTION>
    <BUYER_NAME>FOURIE MARION ROBB</BUYER_NAME>
    <FIRSTNAME>MARION</FIRSTNAME>
    <MIDDLENAME>ROBB</MIDDLENAME>
    <SURNAME>FOURIE</SURNAME>
    <PERSON_TYPE_ID>PP</PERSON_TYPE_ID>
    <BUYER_IDCK>7402110182087</BUYER_IDCK>
    <MUNIC_ID>74</MUNIC_ID>
    <PROV_ID>8</PROV_ID>
    <STREET_NUMBER>973</STREET_NUMBER>
    <STREET_NAME>MAIN</STREET_NAME>
    <STREET_TYPE>ROAD          </STREET_TYPE>
    <PO_CODE>1709</PO_CODE>
    <User_ID>2443598d-948b-4322-bd91-d39f57bec1b6</User_ID>
    <SS_Number>29</SS_Number>
    <SS_UnitNoFrom>1</SS_UnitNoFrom>
    <SS_UnitTo>26</SS_UnitTo>
    <Size>65</Size>
    <X>27.919578</X>
    <Y>-26.125565</Y>
    <SUBURB>ALLENS NEK</SUBURB>
    <Registrar>J</Registrar>
    <Title_Deed_No>ST28776/2004</Title_Deed_No>
    <Reg_Date>20040519</Reg_Date>
    <TownShip>ALLENS NEK</TownShip>
    <Purchase_Price>236500</Purchase_Price>
    <Purchase_Date>20031020</Purchase_Date>
    <Bond_Number>SB37369/2006</Bond_Number>
    <Township_alt>ALLEN'S NEK EXT 32</Township_alt>
    <RE>false</RE>
  </Properties>
</NewDataSet>

新篇

我在查找内部文本时遇到了麻烦,我的代码在上面的foreach中,我的应用程序一直在线上:

ArrayProperties[Count].Value = node.SelectSingleNode(ArrayProperties[Count].LightStoneTag).InnerText;

有人可以告诉我如何从XML文件中提取一个值。

2 个答案:

答案 0 :(得分:2)

以下是示例代码

加载文件的代码

private const string XML_FILE_NAME = "sample.xml";
public static XmlDocument LoadSampleXML()
    {
        XmlDocument oXmlDocument = null;
        try
        {

            oXmlDocument= new XmlDocument();
            oXmlDocument.Load(XML_FILE_NAME);
            return oXmlDocument;
        }
        catch (Exception ex)
        {
            return oXmlDocument;
        }
    }

以下代码可用于获取子节点

 private const string XML_NODE_PROP = "Properties";
 XmlDocument oXmlDocument = null;
 oXmlDocument = LoadSampleXML();
 XmlNodeList oXMlNodeList = oXmlDocument.GetElementsByTagName(XML_NODE_PROP);

 foreach (XmlNode oXmlNodeItem in oXMlNodeList)
            {
               // DoSomething
            }

答案 1 :(得分:1)

我身边没有大的XML知识,但由于PropertiesNewDataSet的子节点,我的猜测是你首先必须得到Properties节点,然后就可以了可能会得到你想要的节点。