parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

Misha v.3 13.03.2015 10:07 / 13.03.2015 10:11

не понимаю сути проблемы.
вы траверсите DOM-дерево.
т.е. у вас есть элемент. у него вы можете спросить, в каком он NS и какой у него NS-префикс.

в чем проблема-то?
@main[]
$x[^xdoc::create{<?xml version="1.0"?>
<r xmlns:xs1="NS1" xmlns:xs2="NS2" xmlns:xs3="NS3">
<xs3:element name="Element1" xs1:type="Type1">zzz</xs3:element>
<xs3:element name="Element2" xs2:type="Type2" />
</r>}]

$h[^hash::create[]]

<pre>
^taint[
$n[$x.documentElement.firstChild]
^while($n){
	^node[$n]
	$n[$n.nextSibling]
}
]
</pre>

^h.foreach[k;v]{$k=$v}[<br />]


@node[n]
$result[^switch[$n.nodeType]{
	^case[$xdoc:ELEMENT_NODE]{<^qn[$n]^if($n.attributes){^n.attributes.foreach[;a]{ ^qn[$a]="$a.nodeValue"}}>^if($n.firstChild){^node[$n.firstChild]}</^qn[$n]>}
	^case[$xdoc:TEXT_NODE]{$n.nodeValue}
}]



@qn[node]
$h.[$node.prefix][$node.namespaceURI]
$result[^if(def $node.prefix){${node.prefix}:}$node.nodeName]