|
|
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
Господа! Возникла необходимость работы с XML документами, нужны следующие основные операции: 1. Получить значение элемента с определенным именем 2. Получить часть документа, которая входит в элемент с определенным именем. Поясню на примерах. Случай №1. Документ: <xml> <mynode>value</mynode> <othernode><child>data</child></othernode> </xml> Нужно уметь говорить: getElemValue("mynode") - вернет "value", или getElemValue("child") - вернет "data" Случай №2. Документ: <xml> <mynode>value</mynode> <othernode><child>data</child></othernode> </xml> Нужно уметь говорить: getPartContaining("othernode") - должен вернуть "<othernode><child>data</child></othernode>" Возможно ли реализовать это с помощью DOM? Я так понял сходу что (1) точно можно, а как насчет (2)? Во втором случае функция должна отдавать именно кусок XML документа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 11:55 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
1. да 2. да ps. вы путаете DOM (Document Object Model ) и представление документа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 12:04 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
1. Библиотеку для XPath подскажите плиз 2. Document Object Model и "представление документа" в чем по вашему разница, буквально пара слов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 12:25 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
класс XPathAPI, искать в Xalan в пятой жабе вроде бы стал частью SDK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 12:53 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
Xalan нет, есть Jaxen, он нормальный? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 13:02 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
токашо посмотрел - есть в rt.jat от jdk1.4 наверное, оно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 13:13 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
Да нашел спасибо. Можно я еще тупые вопросы позадаю? Как я понял из javadoc http://xml.apache.org/xalan-j/apidocs/org/apache/xpath/XPathAPI.html, этот класс берет документ разобранный с помощью DOM, и выдергивает из него такие элементы, которые соответствуют выражению XPath. Я прав? Т.е. этот API работает совсместно с DOM? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 13:20 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
cooluserЯ прав? Да, можно строить запросы к документу по абсолютному/относительному пути, выбирать списки узлов по параметрам, получать значения текстовых элементов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 13:22 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
И еще вопрос. Насколько я понял node.getNodeValue() для текстовых узлов должен возвращать тот текст, который находитя внутри элемента. Ну то есть для <elem>data</elem> д.б. "data". У меня стабильно возвращается пустая строка (не null). В чем я могу быть не прав??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 13:27 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
cooluserИ еще вопрос. Насколько я понял node.getNodeValue() для текстовых узлов должен возвращать тот текст, который находитя внутри элемента. Ну то есть для <elem>data</elem> д.б. "data". У меня стабильно возвращается пустая строка (не null). В чем я могу быть не прав??? тут интересный прикол: у нода elem нет текстового значения, оно есть у его child-нода т.е. data - сам по себе текстовый нод надо что-то вроде node.getChildNodes()[0].getNodeValue() XPath как раз помогает избежать такого монстрообразного кода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 13:42 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
Каким образом? Я же в итоге XPath запросом получаю все равно коллекцию нод ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 13:59 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
А за прикол про "текстовый нод сам себе нод" - спасибо, долго над этим бился :) Самое интересное что с точки зрения XML это же вроде не нод получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 14:00 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
И все таки, и при использовании XPath и при использовании DOM не вижу решения первоначальной задачи: "Написать такой запрос, который вернет часть XML документа". Т.е. нужен не набор нод, а именно кусок XML документа. Например: <xml> <node> <child><data>mydata</data> </child> </xml> Говорю: дай ту часть документа ,которая содержится в тэге <child>, возвращает - <child><data>mydata</data> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 14:06 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
cooluserГоворю: дай ту часть документа ,которая содержится в тэге <child>, возвращает - <child><data>mydata</data> а надо что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 15:03 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
Еще раз. Есть документ: <xml> <node> <child><data>mydata</data> </child> </xml> Цель. Получить часть документа заключенную между открывающем и закрывающем тэгом, например между открывающем и закрывающем тегами <child> Результат для этого случая должен быть таким: <child><data>mydata</data> </child> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 15:16 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
налетсо взаимное недопонимание. нода - это и есть кусок документа. XPath вернет все ноды, соответствующие запросу если нода там такая одна - вернет одну (логично :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 15:41 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
Ну ясно. Т.е. он вернет именно ноду в виде некоторой структуры данных в рамках Java. В моей задаче XML надо рассматривать в данном случае как текст, и я хочу полчать ноду не в виде структуры данных, и в виде plain text, который являются также XML документом. Я об этом писал в сообщении 2696638. В принципе это можно регекспом делать, но интересно можно ли с помощью DOM,SAX,XPath итд? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 17:27 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
cooluserНу ясно. Т.е. он вернет именно ноду в виде некоторой структуры данных в рамках Java. В моей задаче XML надо рассматривать в данном случае как текст, и я хочу полчать ноду не в виде структуры данных, и в виде plain text, который являются также XML документом. Я об этом писал в сообщении 2696638. В принципе это можно регекспом делать, но интересно можно ли с помощью DOM,SAX,XPath итд? DOM для этого отлично подходит. велл-формед XML это дерево из узлов. Node - это интерфейс для представления узла дерева. т.е. надо получить Node (суть фрагмент XML), и после сериализовать его в текст. Ключевые слова для поиска: DOMWriter, DOM serialization В общем, если ничего не поможет - пиши в форум, как приду домой - накидаю пример :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 17:32 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
Ага, кажется уже начинаю понимать! Respect!!! Я, наверное, тебе уже порядок надоело, но если не трудно кинь всё таки пример :) Чё та тяжело у меня все эти XML технологии идут... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 18:48 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2006, 22:55 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
Спасибо, интересно получается. А что если использовать встроенные в DOM средства сериализации? например вот так можно: String xml = "<xml><mynode>value</mynode><othernode><child>data</child></othernode></xml>"; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(false); Document document = factory.newDocumentBuilder().parse( new InputSource(new StringReader(xml))); String xpathExp = "/xml/othernode"; NodeList list = XPathAPI.selectNodeList(document, xpathExp); XMLSerializer xmlSer = new XMLSerializer(); xmlSer.setOutputByteStream(System.out); xmlSer.serialize((Element)list.item(0)); Только в этом случае цепляется стандартный заголовок "<?xml version="1.0"?>", мне он не нужен, как то отключить интересно можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 06:34 |
|
||
|
XML access using DOM
|
|||
|---|---|---|---|
|
#18+
Разобрался, можно вот таким образом: OutputFormat format = new OutputFormat(document); format.setOmitXMLDeclaration(true); // отключает заголовок XML XMLSerializer xmlSer = new XMLSerializer(System.out,format); xmlSer.serialize((Element)list.item(0)); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 06:41 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33745230&tid=2149151]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
199ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
| others: | 214ms |
| total: | 548ms |

| 0 / 0 |
