|
XPath c xmlns
|
|||
---|---|---|---|
#18+
Приветствую, уважаемые! Есть необходимость делать выборки из XML документа с xmlns, но что-то не пойму, как это делать правильно. Вот пример документа: /DOC/DATA/RECORD/REFERENCE[@REFTYPE="Test"]/DESC Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
В обычном случае нужное мне решалось бы так: xpath/DOC/DATA/RECORD/REFERENCE[@REFTYPE="Test"]/DESC Здесь это не проходит. Даже чтобы получить простенькое "hello" пробовалось по-всякому: xpath/DOC/*[local-name(.) = '*']xpath/DOC*[local-name(.) = '*']xpath/DOC[local-name(.) = '*']xpath/DOC/*[namespace-uri()='urn:schemas-test-com/doc.xml']xpath/DOC*[namespace-uri()='urn:schemas-test-com/doc.xml']xpath/DOC[namespace-uri()='urn:schemas-test-com/doc.xml'] Увы, безрезультатно. Результат получился только через это: xpath//*[namespace-uri()='urn:schemas-test-com/doc.xml'] Но как прикрутить его к запросу вида "/DOC/DATA/RECORD/REFERENCE[@REFTYPE="Test"]/DESC" - понять не могу, тут даже два разных xmlns вставить надо, а я вот с одним не справлюсь. Просветите, будьте так добры! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2015, 14:39 |
|
XPath c xmlns
|
|||
---|---|---|---|
#18+
Нашлось одно решение. Выглядит жутковато, но работает: xquery/*[name()='DOC']/*[name()='DATA']/*[name()='RECORD']/*[name()='REFERENCE'][@REFTYPE="Test"]/*[name()='DESC'] ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2015, 15:03 |
|
XPath c xmlns
|
|||
---|---|---|---|
#18+
это зависит от среды, в которой выполняется XPath. Например, при использовании .Net и System.Xml используется XmlNamespaceManager , для Saxon используется метод XPathCompiler.DeclareNamespace , в мозилловском диалекте JS используется XPathNSResolver , итд итп. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2015, 15:14 |
|
XPath c xmlns
|
|||
---|---|---|---|
#18+
Это в TXMLDocument (Delphi). Сейчас вот ещё одна проблема назрела: нужно получать выборки из нодлиста, и когда пытаешься сделать так: Код: pascal 1. 2. 3.
то NodeList содаржит выборку, а вот Node остаётся nil (aka NULL). Если же вместо 'REFERENCE/DESC' передать '*[name()='REFERENCE']/*[name()='DESC']' (а также без первого символа *) - ругается на непрапвильный XPath. А как тогда сделать правильно? Мне выборка нужна для списка однотипных элементов. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2015, 15:43 |
|
XPath c xmlns
|
|||
---|---|---|---|
#18+
Туплю.... Вот оно решение: Код: xml 1.
Всем спасибо :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2015, 15:54 |
|
XPath c xmlns
|
|||
---|---|---|---|
#18+
АматаЭто в TXMLDocument (Delphi). Код: pascal 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2015, 16:28 |
|
XPath c xmlns
|
|||
---|---|---|---|
#18+
Там TXMLDocument используется, что в принципе грамотнее использования MSXML_TLB в виду того, что с обновлением Windows приходится либо перекомпилировать с новым TLB файлом, либо устанавливать более старую версию MSXML (если это возможно). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2015, 17:02 |
|
XPath c xmlns
|
|||
---|---|---|---|
#18+
Drunkyс обновлением Windows приходится либо перекомпилировать с новым TLB файлом, либо устанавливать более старую версию MSXML (если это возможно).Чего??? Сатурну больше не наливать DrunkyТам TXMLDocument используетсяА Вы считаете, что TXMLDocument это собственная разработка Borland/Embarcadero? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2015, 18:18 |
|
|
start [/forum/topic.php?fid=14&msg=39036443&tid=1332171]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
176ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 236ms |
total: | 504ms |
0 / 0 |