Как анализировать XML-файлы? [закрыто]

Я на самом деле не предлагаю, чтобы вы это делали, поскольку индекс UNIQUE, предложенный Piskvor и другими, намного лучший способ сделать это, но вы действительно можете делать то, что пытаетесь:

CREATE TABLE `table_listnames` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  `tele` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB;

Вставить запись:

INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'Rupert', 'Somewhere', '022') AS tmp
WHERE NOT EXISTS (
    SELECT name FROM table_listnames WHERE name = 'Rupert'
) LIMIT 1;

Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

SELECT * FROM `table_listnames`;

+----+--------+-----------+------+
| id | name   | address   | tele |
+----+--------+-----------+------+
|  1 | Rupert | Somewhere | 022  |
+----+--------+-----------+------+

Попробуйте снова вставить одну и ту же запись:

INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'Rupert', 'Somewhere', '022') AS tmp
WHERE NOT EXISTS (
    SELECT name FROM table_listnames WHERE name = 'Rupert'
) LIMIT 1;

Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

+----+--------+-----------+------+
| id | name   | address   | tele |
+----+--------+-----------+------+
|  1 | Rupert | Somewhere | 022  |
+----+--------+-----------+------+

Вставить другую запись:

INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'John', 'Doe', '022') AS tmp
WHERE NOT EXISTS (
    SELECT name FROM table_listnames WHERE name = 'John'
) LIMIT 1;

Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

SELECT * FROM `table_listnames`;

+----+--------+-----------+------+
| id | name   | address   | tele |
+----+--------+-----------+------+
|  1 | Rupert | Somewhere | 022  |
|  2 | John   | Doe       | 022  |
+----+--------+-----------+------+

И так далее ...

492
задан John Saunders 21 June 2015 в 04:22
поделиться

7 ответов

Я использовал бы LINQ для XML, если Вы находитесь в.NET 3.5 или выше.

237
ответ дан Joey 21 June 2015 в 04:22
поделиться

Это очень просто. Я знаю, что это стандартные методы, но можно создать собственную библиотеку для контакта с этим намного лучше.

Вот некоторые примеры:

XmlDocument xmlDoc= new XmlDocument(); // Create an XML document object
xmlDoc.Load("yourXMLFile.xml"); // Load the XML document from the specified file

// Get elements
XmlNodeList girlAddress = xmlDoc.GetElementsByTagName("gAddress");
XmlNodeList girlAge = xmlDoc.GetElementsByTagName("gAge"); 
XmlNodeList girlCellPhoneNumber = xmlDoc.GetElementsByTagName("gPhone");

// Display the results
Console.WriteLine("Address: " + girlAddress[0].InnerText);
Console.WriteLine("Age: " + girlAge[0].InnerText);
Console.WriteLine("Phone Number: " + girlCellPhoneNumber[0].InnerText);

кроме того, существуют [приблизительно 111] другие методы для работы с. Например, здесь . И я думаю, что нет никакого лучшего метода, чтобы сделать это; всегда необходимо ли выбирать его собой, что наиболее подходит для Вас.

297
ответ дан Danny Beckett 21 June 2015 в 04:22
поделиться

Используйте пользу Схема XSD, чтобы создать ряд классов с xsd.exe и использовать XmlSerializer для создания дерева объектов из XML и наоборот. Если у Вас есть немного ограничений на Вашу модель, Вы могли бы даже попытаться создать прямое отображение между Вами образцовые классы и XML с Xml*Attribute.

существует вводная статья о Сериализации XML на MSDN.

подсказка по Производительности: Построение XmlSerializer является дорогим. Сохраните ссылку на Ваш XmlSerializer экземпляр, если Вы намереваетесь анализировать/писать несколько XML-файлов.

47
ответ дан Danny Beckett 21 June 2015 в 04:22
поделиться

При обработке большого объема данных (много мегабайтов) тогда, Вы хотите использовать XmlReader для потоковой передачи, анализируют XML.

Что-либо еще (XPathNavigator, XElement, XmlDocument и даже XmlSerializer, если Вы сохраняете полный сгенерированный граф объектов) приведет к использование верхней памяти и также очень медленное время загрузки.

, Конечно, при необходимости во всех данных в памяти так или иначе, тогда у Вас не может быть большого выбора.

24
ответ дан Community 21 June 2015 в 04:22
поделиться

Используйте XmlTextReader , XmlReader , XmlNodeReader и System.Xml.XPath пространство имен. И ( XPathNavigator , XPathDocument , XPathExpression , XPathnodeIterator ).

Обычно XPath делает чтение XML легче, который является тем, что Вы могли бы искать.

17
ответ дан Danny Beckett 21 June 2015 в 04:22
поделиться

При использовании.NET 2.0 попробуйте XmlReader и ее подклассы XmlTextReader, и XmlValidatingReader. Они обеспечивают быстрое, легкое (использование памяти, и т.д.), передают только способ проанализировать XML-файл.

, Если Вам нужно XPath возможности, попробуйте XPathNavigator. Если Вам нужен весь документ в попытке памяти XmlDocument.

6
ответ дан Danny Beckett 21 June 2015 в 04:22
поделиться

Я не уверен, существует ли "лучшая практика для парсинга XML". Существуют многочисленные технологии, которым удовлетворяют для различных ситуаций. Какой способ использовать зависит от конкретного сценария.

можно пойти с LINQ  to  XML, XmlReader , XPathNavigator или даже регулярные выражения. Если Вы разрабатываете свои потребности, я могу попытаться дать некоторые предложения.

5
ответ дан Danny Beckett 21 June 2015 в 04:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: