Как показать указанную c часть XML файла? - PullRequest
0 голосов
/ 22 марта 2020

Я ищу способ показать определенную c часть кода в XML файле. У меня есть резервная копия SMS в файле xml, и я пытаюсь закодировать программное обеспечение, чтобы показать все сообщения от одного контакта (который выбран в TextBox). Большая проблема (для меня) состоит в том, что вся информация (имя контакта) , сообщение, номер телефона) находятся внутри одного тега.

Вот пример xml файла:

  <sms protocol="0" address="phone number" date="1338793176487" type="1" subject="null" body="SMS text" toa="null" sc_toa="null" service_center="phone number" read="1" status="-1" locked="0" date_sent="null" readable_date="4 juin 2012 08:59:36" contact_name="contact name" />

PS: я использую Visual Studio с. NET Framework

Ответы [ 3 ]

0 голосов
/ 22 марта 2020

Вы можете использовать [] для указания условий в XPath с помощью XmlDocument , например:

//sms[@address="..."]

Это означает: выбрать все sms узлы с условием, что @address имеет значение .... Знак @ обозначает атрибут.

Пример кода:

string xml = "<sms protocol=\"0\" address=\"phone number\" date=\"1338793176487\" type=\"1\" subject=\"null\" body=\"SMS text\" toa=\"null\" sc_toa=\"null\" service_center=\"phone number\" read=\"1\" status=\"-1\" locked=\"0\" date_sent=\"null\" readable_date=\"4 juin 2012 08:59:36\" contact_name=\"contact name\" />";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
var nodes = doc.SelectNodes("//sms[@address=\"phone number\"]");
foreach(var node in  nodes)
{
    Console.WriteLine(node);
}
0 голосов
/ 22 марта 2020

Вы можете использовать Linq для XML с XDocument и использовать предложение where для выбора узлов, для которых установлен определенный атрибут.

Пример кода:

string xml = "<sms protocol=\"0\" address=\"phone number\" date=\"1338793176487\" type=\"1\" subject=\"null\" body=\"SMS text\" toa=\"null\" sc_toa=\"null\" service_center=\"phone number\" read=\"1\" status=\"-1\" locked=\"0\" date_sent=\"null\" readable_date=\"4 juin 2012 08:59:36\" contact_name=\"contact name\" />";
var doc = XDocument.Parse(xml);

var nodes = from element in doc.Elements("sms") 
            where (string) element.Attribute("address") == "phone number"
            select element;
foreach(var node in  nodes)
{
    Console.WriteLine(node);
}
0 голосов
/ 22 марта 2020

Поместите все атрибуты в словарь, используя Xml Linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            string xml = File.ReadAllText(FILENAME);

            XElement sms = XElement.Parse(xml);

            Dictionary<string, string> dict = sms.Attributes().GroupBy(x => x.Name.LocalName, y => (string)y)
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...