1

私は XML 文字列を持っています。C# 2.0 を使用して、その文字列を読み取って、キーと値のペアまたは個別のリストを作成する必要があります。Web サービスのフィールド マッピングには、以下の XML を使用する必要があります。

以下は私のxmlのサンプルです

<?xml version="1.0" encoding="utf-8" ?>
<Integration>
  <FiledMappings name ="Employee">
    <Field Name="EmployeeID">
      <DataSource>EmployeeNO</DataSource>
    </Field>
    <Field Name="Department">
      <DataSource>Department</DataSource>
    </Field>
    <Field Name="EmployeeName">
      <DataSource>Name</DataSource>
    </Field>
  </FiledMappings>
</Integration>
4

4 に答える 4

3

このコードを試してください。私は使用DictionaryしましたXmlDocument

var keyValues = new Dictionary<string, string>();

var document = new XmlDocument();
document.LoadXml(stringXml);
foreach (XmlNode node in document.SelectNodes(@"//Field"))
{
    keyValues.Add(node.Attributes["Name"].InnerText, 
                  node.InnerText);
}
于 2012-07-30T04:45:18.650 に答える
1

次のコードを使用して、必要な辞書を取得できます。

        StringBuilder s = new StringBuilder();
        s.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
        s.AppendLine("<Integration>");
        s.AppendLine("<FiledMappings name =\"Employee\">");
        s.AppendLine("<Field Name=\"EmployeeID\">");
        s.AppendLine("<DataSource>EmployeeNO</DataSource>");
        s.AppendLine("</Field>");
        s.AppendLine("<Field Name=\"Department\">");
        s.AppendLine("<DataSource>Department</DataSource>");
        s.AppendLine("</Field>");
        s.AppendLine("<Field Name=\"EmployeeName\">");
        s.AppendLine("<DataSource>Name</DataSource>");
        s.AppendLine("</Field>");
        s.AppendLine("</FiledMappings>");
        s.AppendLine("</Integration>");

        Dictionary<string, string> d = new Dictionary<string, string>();

        XmlDocument doc = new XmlDocument();
        doc.LoadXml(s.ToString());

        XmlNode x = doc.ChildNodes[1].ChildNodes[0];
        foreach (XmlNode n in x.ChildNodes)
            d[n.Attributes[0].Value] = n.FirstChild.FirstChild.Value;

        foreach (KeyValuePair<string, string> p in d)
            Console.WriteLine(string.Format("{0}:\t{1}", p.Key, p.Value));

        Console.ReadLine();

または、.Net 3.5 を使用できるように思われる場合は、Linq to xml を利用できます。以下を参照してください。

        StringBuilder s = new StringBuilder();
        s.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
        s.AppendLine("<Integration>");
        s.AppendLine("<FiledMappings name =\"Employee\">");
        s.AppendLine("<Field Name=\"EmployeeID\">");
        s.AppendLine("<DataSource>EmployeeNO</DataSource>");
        s.AppendLine("</Field>");
        s.AppendLine("<Field Name=\"Department\">");
        s.AppendLine("<DataSource>Department</DataSource>");
        s.AppendLine("</Field>");
        s.AppendLine("<Field Name=\"EmployeeName\">");
        s.AppendLine("<DataSource>Name</DataSource>");
        s.AppendLine("</Field>");
        s.AppendLine("</FiledMappings>");
        s.AppendLine("</Integration>");

        XElement x = XElement.Parse(s.ToString());

        Dictionary<string, string> d = x.Element("FiledMappings").Elements("Field").ToDictionary(e => e.Attribute("Name").Value, e => e.Element("DataSource").Value);
        foreach (KeyValuePair<string, string> p in d)
            Console.WriteLine(string.Format("{0}:\t{1}", p.Key, p.Value));

        Console.ReadLine();
于 2012-07-30T02:26:28.653 に答える
0

これは私が動的にできることです:

private Dictionary<string, string> Load_XML_wsMapping(String _WSMapping)
        {
            // Web Service Mapping forms Key Value Pair
            XmlDocument doc = new XmlDocument(_WSMapping);
            doc.LoadXml();
            Dictionary<string, string> dictXMLMapping = new Dictionary<string, string>();

            try
            {
                XmlNodeList list = doc.FirstChild.NextSibling.FirstChild.ChildNodes;

                for (int i = 0; i < list.Count; i++)
                {
                    XmlElement el = ((System.Xml.XmlElement)(list[i]));
                    dictXMLMapping.Add(el.Attributes[0].Value, list[i].InnerText);

                }
            }
            catch (Exception err)
            {

                throw new Exception("Error occurred while mapping Web Service -- Bad XML." + err.Message);
            }
            return dictXMLMapping ;
        }
于 2012-07-31T17:20:01.023 に答える
-1

たとえば、以下の辞書を使用できます

 private static IDictionary<string, string> parseReplicateBlock(StreamReader reader)
于 2012-07-30T01:38:05.320 に答える