Я на самом деле не предлагаю, чтобы вы это делали, поскольку индекс 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 |
+----+--------+-----------+------+
И так далее ...
Я использовал бы LINQ для XML, если Вы находитесь в.NET 3.5 или выше.
Это очень просто. Я знаю, что это стандартные методы, но можно создать собственную библиотеку для контакта с этим намного лучше.
Вот некоторые примеры:
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] другие методы для работы с. Например, здесь . И я думаю, что нет никакого лучшего метода, чтобы сделать это; всегда необходимо ли выбирать его собой, что наиболее подходит для Вас.
Используйте пользу Схема XSD, чтобы создать ряд классов с xsd.exe и использовать XmlSerializer
для создания дерева объектов из XML и наоборот. Если у Вас есть немного ограничений на Вашу модель, Вы могли бы даже попытаться создать прямое отображение между Вами образцовые классы и XML с Xml*Attribute.
существует вводная статья о Сериализации XML на MSDN.
подсказка по Производительности: Построение XmlSerializer
является дорогим. Сохраните ссылку на Ваш XmlSerializer
экземпляр, если Вы намереваетесь анализировать/писать несколько XML-файлов.
При обработке большого объема данных (много мегабайтов) тогда, Вы хотите использовать XmlReader
для потоковой передачи, анализируют XML.
Что-либо еще (XPathNavigator
, XElement
, XmlDocument
и даже XmlSerializer
, если Вы сохраняете полный сгенерированный граф объектов) приведет к использование верхней памяти и также очень медленное время загрузки.
, Конечно, при необходимости во всех данных в памяти так или иначе, тогда у Вас не может быть большого выбора.
Используйте XmlTextReader
, XmlReader
, XmlNodeReader
и System.Xml.XPath
пространство имен. И ( XPathNavigator
, XPathDocument
, XPathExpression
, XPathnodeIterator
).
Обычно XPath
делает чтение XML легче, который является тем, что Вы могли бы искать.
При использовании.NET 2.0 попробуйте XmlReader
и ее подклассы XmlTextReader
, и XmlValidatingReader
. Они обеспечивают быстрое, легкое (использование памяти, и т.д.), передают только способ проанализировать XML-файл.
, Если Вам нужно XPath
возможности, попробуйте XPathNavigator
. Если Вам нужен весь документ в попытке памяти XmlDocument
.
Я не уверен, существует ли "лучшая практика для парсинга XML". Существуют многочисленные технологии, которым удовлетворяют для различных ситуаций. Какой способ использовать зависит от конкретного сценария.
можно пойти с LINQ to XML, XmlReader
, XPathNavigator
или даже регулярные выражения. Если Вы разрабатываете свои потребности, я могу попытаться дать некоторые предложения.