powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Поиск по значению
6 сообщений из 6, страница 1 из 1
Поиск по значению
    #36493560
serverokAsservelat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Есть xml-файл:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0" encoding="utf-8" ?>
<MyFriends>
  <Man>
    <name>Ваня</name>
    <surName>Иванов</surName>
    <dateOfBirth> 09 . 05 . 1922 </dateOfBirth>
    <category>друг</category>
    <phone> 778899 </phone>
    <mobilePhone> 0455789870 </mobilePhone>
    <location>Россия, Башкортостан, Пр.Гагарина д. 63 , кв. 59 </location>
  </Man>
  <Man>
...

Есть строка например "Ваня Иванов".

Необходимо вытянуть из данного файла всю информацию о Ване Ивановом.
Спасибо.
...
Рейтинг: 0 / 0
Поиск по значению
    #36493695
Mr WeL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
<xsl:apply-templates select='//Man[name="Ваня" and surName="Иванов"]' mode='vanya'/>




<xsl:template match='Man' mode='vanya'>
...
<xsl:value-of select='dateOfBirth' />
...
</xsl:template>
...
Рейтинг: 0 / 0
Поиск по значению
    #36493699
serverokAsservelat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mr WeL<xsl:apply-templates select='//Man[name="Ваня" and surName="Иванов"]' mode='vanya'/>




<xsl:template match='Man' mode='vanya'>
...
<xsl:value-of select='dateOfBirth' />
...
</xsl:template>

Простите, но мне это ничего не дало. Подробнее можно, куда этот кусок кода "запихнуть". Действительно, я ничего не понимаю.

Пока сам вот нарыл способ:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ArrayList ar = new ArrayList();
            string path = @"FileName.xml";

            XPathDocument xpdoc = new XPathDocument(path);
            
            XPathNavigator nav = xpdoc.CreateNavigator();
            XPathNodeIterator iterator = nav.Select("MyFriends/Man[name='Ваня' and surName='Иванов']");
            
            iterator.MoveNext();
            
            ar.Add(iterator.Current.Value);
Но, список ar имеет одну запись, естественно в виде одной строки.
Ак как получит итератор по данному итератору iterator?
...
Рейтинг: 0 / 0
Поиск по значению
    #36493706
serverokAsservelat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил!!!
Если кому надо, может пригодится:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ArrayList ar = new ArrayList();
            string path = @"..\..\MyFriends.xml";
            //Так мы можем вытянуть информацию о искомой записи по элементно
            XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNode root = doc.DocumentElement;
            XmlNode node = root.SelectSingleNode("Man[name=Ваняand surName='Иванов']");
            XmlNodeList list = node.ChildNodes;
            for (int i =  0 ; i < list.Count; i++)
                ar.Add(list.Item(i).InnerText);
Так мы получили всю информацию о Ване Ивановом в отдельных элементах списка ar, а не одной строкой.
...
Рейтинг: 0 / 0
Поиск по значению
    #36498301
serverokAsservelat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще вопрос такой.
Как удалить целого человека (точнее запись о человеке)?
Делаю так
Код: plaintext
1.
2.
3.
XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNode root = doc.DocumentElement;
            XmlNode node = root.SelectSingleNode(String.Format("Man[name='{0}' and surName='{1}']", name, surName));
node.RemoveAll();
            doc.Save(path);
но в итоге остается пара пустых тегов Man
Код: plaintext
<Man></Man>

А надо и от них избавиться, то есть удалить сам узел <Man> вместе со всем его содержимым.
...
Рейтинг: 0 / 0
Поиск по значению
    #36498306
serverokAsservelat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNode root = doc.DocumentElement;
            XmlNode node = root.SelectSingleNode(String.Format("Man[name='{0}' and surName='{1}']", name, surname));
            XmlNode outer = node.ParentNode;
            outer.RemoveChild(node);
            doc.Save(path);

Все, опять сделал.
Но тут еще один вопрос по производительности.
Такой метод перезаписывания целого документа нормально работает с небольшими xml-файлами.
А если узлов 1000.000 ? Есть ли способ непосредственного удаления/редактирования узлов прямо в исходном документе, не считывая его во временный файл?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Поиск по значению
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]