XML - есть SingleNode как узнать его child index у родителя
-
- Уже с Приветом
- Posts: 5771
- Joined: 02 Dec 1999 10:01
- Location: Saint-Petersburg --> Bellevue, WA
XML - есть SingleNode как узнать его child index у родителя
Есть xml document с похожей структурой:
<contacts>
<contact>
<field1>Value1_1</field1>
<field2>Value2_1</field2>
<field2>Value3_1</field2>
</contact>
<contact>
<field1>Value1_2</field1>
<field2>Value2_2</field2>
<field2>Value3_2</field2>
</contact>
<contact>
<field1>Value1_3</field1>
<field2>Value2_3</field2>
<field2>Value3_3</field2>
</contact>
</contacts>
Допустим используя XPath:
myNode=myDocument.SelectSingleNode(/contacts/contact[field2='Value2_2'])
То есть в myNode сейчас находится 2-й по порядку node <contact>.
Можно ли мне как-нибудь докопаться до информации, что он именно второй по порядку у родителя (<contacts>) из myNode без дополнительных поисков по myDocument? Никакого id у этого node нет и не будет.
<contacts>
<contact>
<field1>Value1_1</field1>
<field2>Value2_1</field2>
<field2>Value3_1</field2>
</contact>
<contact>
<field1>Value1_2</field1>
<field2>Value2_2</field2>
<field2>Value3_2</field2>
</contact>
<contact>
<field1>Value1_3</field1>
<field2>Value2_3</field2>
<field2>Value3_3</field2>
</contact>
</contacts>
Допустим используя XPath:
myNode=myDocument.SelectSingleNode(/contacts/contact[field2='Value2_2'])
То есть в myNode сейчас находится 2-й по порядку node <contact>.
Можно ли мне как-нибудь докопаться до информации, что он именно второй по порядку у родителя (<contacts>) из myNode без дополнительных поисков по myDocument? Никакого id у этого node нет и не будет.
-
- Уже с Приветом
- Posts: 605
- Joined: 14 Feb 2002 10:01
- Location: Russia
Что-то типа
Это будет порядковый номер myNode среди прочих элементов у их общего родителя.
Code: Select all
myNode.selectNodes("preceding-sibling::*").length + 1
Это будет порядковый номер myNode среди прочих элементов у их общего родителя.
-
- Уже с Приветом
- Posts: 5771
- Joined: 02 Dec 1999 10:01
- Location: Saint-Petersburg --> Bellevue, WA
Хорошо другой вопрос, ответ на который может избавить от ответа на первый.
Можно ли как-нибудь сделать поиск по xml case insensetive?
Мне нужно по значению трех полей из <contact> добыть остальные.
По типу если вы забыли свой username и password, введите свой e-маил и пр. проверочные поля и остальное мы вам вышлем по e-mail.
Проблема в том что все это может быть как в Upper case так и в lower case, так что поиск мне надо сделать case insensitive, а вернуть значения с сохранением регистров.
Можно ли как-нибудь сделать поиск по xml case insensetive?
Мне нужно по значению трех полей из <contact> добыть остальные.
По типу если вы забыли свой username и password, введите свой e-маил и пр. проверочные поля и остальное мы вам вышлем по e-mail.
Проблема в том что все это может быть как в Upper case так и в lower case, так что поиск мне надо сделать case insensitive, а вернуть значения с сохранением регистров.
-
- Уже с Приветом
- Posts: 5771
- Joined: 02 Dec 1999 10:01
- Location: Saint-Petersburg --> Bellevue, WA
vlad12345 wrote:Что-то типаCode: Select all
myNode.selectNodes("preceding-sibling::*").length + 1
Это будет порядковый номер myNode среди прочих элементов у их общего родителя.
Спасибо! Попробую.
Я просто решила сделать копию xml и перевести ее в lower case, по трем полям найти нужный node, запомнить его порядковый номер и из оригинального xml с учетом регистров взять нужные поля по порядковому номеру.
Если как-нибудь можно делать поиск без учета регистра то тогда такой путь конечно extra step.
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: XML - есть SingleNode как узнать его child index у родителя
AnyaGal wrote:...Можно ли мне как-нибудь докопаться до информации, что он именно второй по порядку у родителя (<contacts>) из myNode без дополнительных поисков по myDocument? Никакого id у этого node нет и не будет.
Аня,
Я не совсем с ответом, но вот подумала может вам пригодиться.
http://www.mousetrap.net/syllabus/xml/day4.html
Когда я в свое время делала browse, search и directory XML файла, пользовалась сделующим кодом:
search:
Code: Select all
<script>
function x()
{
n = document.form1.SearchText.value
root = po.documentElement
sndGenList = root.childNodes
sndGenNode = sndGenList.item(n-1)
thrdGenList = sndGenNode.childNodes
thrdGenNode1 = thrdGenList.item(1)
thrdGenNode5 = thrdGenList.item(5)
document.form1.textArea.value = thrdGenNode1.text
document.form1.refNumField.value = thrdGenNode5.text
return false
}
function clear()
{
document.form1.SearchText.value= ""
document.form1.textArea.value = ""
document.form1.refNumField.value = ""
}
</script>
browse:
Code: Select all
<script>
var m = 1
var i = 1
function first()
{
i = -1
return next()
}
function last()
{
i = m
return prev()
}
function next()
{
if (i < (m - 1)) i++;
return show()
}
function prev()
{
if (i > 0) i--;
return show()
}
function show()
{
var name = ""
var manuf = ""
var desc = ""
var rnum = ""
var nl = po.getElementsByTagName("product")
for (k = 0; k < nl.length; k++)
{
if (k != i) continue;
var node = nl.item(k)
var chl = node.childNodes
name = chl.item(1).text
manuf = chl.item(2).text
desc = chl.item(3).text
rnum = chl.item(5).text
}
form1.NameArea.value = name
form1.ManufField.value = manuf
form1.DescArea.value = desc
form1.refNumField.value = rnum
return false
}
</script>
directory:
Code: Select all
<script>
function show()
{
root = po.documentElement
sndGenList = root.childNodes
var a_line="";
var loop = 0;
while (loop < 24)
{
sndGenNode = sndGenList.item(loop)
thrdGenList = sndGenNode.childNodes
thrdGenNode = thrdGenList.item(1)
a_line = a_line + thrdGenNode.text + "\n"
loop=loop+1
}
document.form1.textArea.value = a_line
return false
}
</script>
Если это чем-то поможет, могу выслать весь проект вместе с XML файлом на емыл.
Сабина
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: XML - есть SingleNode как узнать его child index у родителя
насчет case sensitive. А нельзя использовать case-insensitive parser?
Сабина
Сабина
-
- Уже с Приветом
- Posts: 5771
- Joined: 02 Dec 1999 10:01
- Location: Saint-Petersburg --> Bellevue, WA
Re: XML - есть SingleNode как узнать его child index у родителя
Sabina wrote:насчет case sensitive. А нельзя использовать case-insensitive parser?
Сабина
Я не знаю - я использую встроенный в .NET.
Может он уже case insensetive stal, но раньше по-моему был case sensetive.
-
- Уже с Приветом
- Posts: 5771
- Joined: 02 Dec 1999 10:01
- Location: Saint-Petersburg --> Bellevue, WA
Re: XML - есть SingleNode как узнать его child index у родителя
Sabina wrote:Если это чем-то поможет, могу выслать весь проект вместе с XML файлом на емыл.
Спасибо, но наверное не надо.
У меня с навигацией и поиску по xml проблем вроде нет, я уже давно xml использую, просто иногда случается ступор.
-
- Уже с Приветом
- Posts: 1071
- Joined: 18 Nov 2003 22:53
- Location: MA
Re: XML - есть SingleNode как узнать его child index у родителя
Sabina wrote:насчет case sensitive. А нельзя использовать case-insensitive parser?
Сабина
No, XML is case sensitive!
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: XML - есть SingleNode как узнать его child index у родителя
testuser wrote:Sabina wrote:насчет case sensitive. А нельзя использовать case-insensitive parser?
Сабина
No, XML is case sensitive!
То есть прогнать xml файл, например через microdom не получиться?
....Because of these departures from the XML standards, the parsers used by most DOM implementations will choke on valid HTML. microdom, by default, parses in case-insensitive mode, allowing it to parse HTML that has non-matching cases on tags.
Сабина
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: XML - есть SingleNode как узнать его child index у родителя
AnyaGal wrote:У меня с навигацией и поиску по xml проблем вроде нет, я уже давно xml использую, просто иногда случается ступор.
У меня тоже ступоры случаются и нередко . И всегда так приятно, когда приветовские мужчины приходят на помощь
Сабина
-
- Уже с Приветом
- Posts: 5771
- Joined: 02 Dec 1999 10:01
- Location: Saint-Petersburg --> Bellevue, WA
Re: XML - есть SingleNode как узнать его child index у родителя
Sabina wrote:И всегда так приятно, когда приветовские мужчины приходят на помощь
Это точно.
Очень мне нравится мне раздел "Вопросы IT".
"Автомобили" тоже ничего.
Главное в "Жизни" и "Политике" не сильно выступать.
-
- Уже с Приветом
- Posts: 5771
- Joined: 02 Dec 1999 10:01
- Location: Saint-Petersburg --> Bellevue, WA
vlad12345 wrote:Что-то типаCode: Select all
myNode.selectNodes("preceding-sibling::*").length + 1
Это будет порядковый номер myNode среди прочих элементов у их общего родителя.
Еще раз спасибо! Работает!
-
- Уже с Приветом
- Posts: 1476
- Joined: 05 Dec 2000 10:01
- Location: Vilnius -> Bonn
Re: XML - есть SingleNode как узнать его child index у родит
Sabina wrote:AnyaGal wrote:У меня с навигацией и поиску по xml проблем вроде нет, я уже давно xml использую, просто иногда случается ступор.
У меня тоже ступоры случаются и нередко . И всегда так приятно, когда приветовские мужчины приходят на помощь
Сабина
А почему ваши аватары пропали куда-то ? Прям сейчас только понял, что это же та самая Сабина!