Есть несколько примеров использования Anti-Xml для извлечения информации из XML-документов, но я не могу найти использование Anti-Xml для создания XML-документов. Поддерживает ли Anti-Xml создание документов, или я должен использовать другую библиотеку для этого (какой?). Есть ли у кого-нибудь пример создания XML-документа с Anti-Xml?Можете ли вы использовать antixml для создания XML-документов?
ответ
Да, вы можете построить (и сериализации) XML-документы:
import com.codecommit.antixml._
val doc = Elem(None, "doc", Attributes(), Map(), Group(
Elem(None, "foo", Attributes("id" -> "bar"), Map(), Group(Text("baz")))
))
val writer = new java.io.StringWriter
val serializer = new XMLSerializer("UTF-8", true)
serializer.serializeDocument(doc, writer)
Вы также можете использовать Anti-XML, сделать некоторые интересные трюки редактирования:
val foos = doc \ "foo"
val newFoo = foo.head.copy(children = Group(Text("new text!")))
val newDoc = foos.updated(0, newFoo).unselect
Теперь newDoc
содержит отредактированный документ:
scala> newDoc.toString
res1: String = <doc><foo id="bar">new text!</foo></doc>
Zipper
, что doc \ "foo"
возвращает отличается от NodeSeq
тем, что он несет информацию о его контексте, что позволяет «отменить» операцию выбора, выполненную \
.
Обновление в ответ на комментарий ziggystar «s ниже: если вы хотите что-то вроде XML литералов Scala, вы можете просто использовать convert
на любом scala.xml.Elem
:
val test: com.codecommit.antixml.Elem = <test></test>.convert
Я предполагала, речь шла о программное создание.
Ну, я думаю, вопрос должен быть прочитан как «Есть ли способ использовать Anti-Xml для создания документов * удобным способом *?». Как есть какой-то DSL для создания документов? Конечно, вы можете вручную склеить классы реализации ... – ziggystar
@ziggystar: см. Мое обновление - вы можете просто использовать литералы Scala и конвертировать. –
Если вы не используете другие части анти-xml, я бы придерживался литературных произведений Скалы. Однако, если вы ищете лучшую альтернативу с красивым дизайнером DSL, обновления на месте, использование XPath (DSL и String) и т. Д., Я бы предложил посмотреть на весы. С сайта 0,3-RC5 выпуска (http://scala-scales.googlecode.com/svn/sites/scales/scales-xml_2.9.1/0.3-RC5/index.html):
val ns = Namespace("test:uri")
val nsa = Namespace("test:uri:attribs")
val nsp = nsa.prefixed("pre")
val builder =
ns("Elem") /@ (nsa("pre", "attr1") -> "val1",
"attr2" -> "val2",
nsp("attr3") -> "val3") /(
ns("Child"),
"Mixed Content",
ns("Child2") /(ns("Subchild") ~> "text")
)
Кроме того, для прямая сериализация вы можете использовать потоковое вещание, так как модель Scales Xml объединяет модель для потоковой обработки и обработки на основе дерева.
Я коротко перед 0.3-RC6 со многими другими документами (и очень крутой схемой сравнения xml), но я жду, прежде всего, перехода на сонатип. (эта на следующей неделе)
Знаете ли вы, существует ли библиотека XML, которая каким-то образом интегрирует XML-литералы Scala? Я думаю, что с макросами в 2.10 это может стать вполне возможным. – ziggystar
У меня возникнет соблазн взглянуть на него, но в настоящее время я поддерживаю 2.8.x, 2.9.x, и я хотел бы поддерживать равномерно 2.10.x. Добавление поддержки макросов для повторного использования литералов должно было бы быть еще одним lib (не означает, что я не буду этого делать, просто чтобы увидеть, возможно ли это). В соответствии с вашим комментарием выше, хотя полная поддержка пространства имен отсутствует, масштабирует цели пространства имен напрямую, вы просто не можете иметь неквалифицированное имя на любом сайте использования. (Асинхронный разборка следующий в моем списке). – Chris
- 1. Можете ли вы использовать scons для создания расширений PHP?
- 2. Можете ли вы использовать Ionic framework для создания приложений Mac?
- 3. Можете ли вы использовать combReducers для создания глубоких редукторов?
- 4. Можете ли вы использовать HipHop PHP для создания расширения php?
- 5. Можете ли вы использовать макросы для создания типа «self» return?
- 6. Можете ли вы использовать цикл for для создания имен массивов?
- 7. Можете ли вы использовать JS для создания SWF-файла?
- 8. Можете ли вы использовать WcfTestClient для WebApi?
- 9. Можете ли вы использовать xml для доступа?
- 10. Можете ли вы параметризовать функцию создания намерения?
- 11. Какие компоненты вы можете использовать для создания приложений AIR?
- 12. Можете ли вы использовать word_diff с Gitlab?
- 13. Можете ли вы использовать исправление через do.call?
- 14. Можете ли вы использовать AngularJS с Parse.com?
- 15. Можете ли вы использовать jQuery в ePub
- 16. Можете ли вы использовать csv.DictReader без файла?
- 17. Можете ли вы использовать C++ в Xcode?
- 18. Можете ли вы использовать OnClickListener с тостами?
- 19. Можете ли вы использовать RSpec, Shoulda, RCov?
- 20. Можете ли вы использовать итератор в массиве?
- 21. Можете ли вы использовать ValidationRules в ListBox.SelectedItems?
- 22. Можете ли вы использовать SharedPreferences внутри фрагмента?
- 23. Можете ли вы использовать CollectionViewSource внутри DataTemplate?
- 24. Можете ли вы использовать AJAX для эхо-файла для загрузки?
- 25. Можете ли вы использовать Python для поиска csv для значения?
- 26. Можете ли вы использовать Kinect для Xbox для Kinect Fusion?
- 27. Можете ли вы использовать @model как @ViewBag?
- 28. Можете ли вы использовать jquery в sessionStorage?
- 29. Можете ли вы использовать ForEach в словаре?
- 30. Можете ли вы использовать odbc_connect() при спусках?
На самом деле, я задал себе тот же вопрос некоторое время назад, потому что я был недоволен отсутствием поддержки пространства имен с литералами Scala XML. Поэтому я искал альтернативные библиотеки для создания моего XML. Для моего варианта использования ответ кажется отрицательным, судя по ответу Тревиса. – ziggystar