Специальные символы с Ruby XML Builder - PullRequest
5 голосов
/ 03 декабря 2009

Я пытаюсь в Google kml тур с ruby ​​и получаю синтаксическую ошибку с этим кодом

xml = builder.gx:Tour

Это не любит двоеточие. Есть ли способ заставить его скомпилировать это?

Ответы [ 5 ]

8 голосов
/ 03 декабря 2009

Пришлось сделать

xml.tag!("gx:tour")
4 голосов
/ 22 марта 2013

Если вы хотите добавить другой тег внутри тега, тогда

xml.tag!("tag:name", attribute: "value") do |t|
   t.title("value for title")
end

А если вы хотите указать простое значение, то

xml.tag!("tag:name","value for tag", attribute: "attribute value")
4 голосов
/ 07 февраля 2010

Да, и если вы хотите указать какое-то значение, это будет что-то вроде

xml.tag!("gx:tour", "value of gx:tour", "attribute1"=>"attribute1val", "attribute2"=>"attribute2val", ..., "attributeN"=>"attributeNval") 
1 голос
/ 25 июня 2012

Начиная с версии 2 Builder имеется некоторая поддержка пространства имен .

Так что теперь, если вы хотите достичь того же результата, вы можете добавить пробел перед двоеточием:

xml = builder.gx :Tour
0 голосов
/ 30 марта 2018

Супер старый вопрос, но в Rails 5.1.5 с Builder 3.2.3 очень просто использовать пространства имен, вложение и т. Д. Следующий пример является надуманным, но я думаю, что он показывает все различные комбинации:

<?xml version="1.0" encoding="UTF-8"?>
<root simple="foo" xmlns:example="http://www.example.com/example.dtd">
  <container>
    <element>A normal element</element>
    <example:namespaced_element>An element in the "example" namespace</example:namespaced_element>
  </container>
  <example:namespaced_container>
    <element_with_attribute attribute="foo">Another element</element_with_attribute>
    <example:namespaced_element_with_attribute attribute="bar">Another namespaced element</example:namespaced_element_with_attribute>
  </example:namespaced_container>
  <container_with_attribute attribute="baz">
    <empty_element/>
    <example:namespaced_empty_element/>
  </container_with_attribute>
  <example:namespaced_container_with_attribute attribute="qux">
    <empty_element_with_attribute attribute="quux"/>
    <example:namespaced_empty_element_with_attribute attribute="corge"/>
  </example:namespaced_container_with_attribute>
</root>

А это шаблон компоновщика, который выдает выше:

#encoding: UTF-8
xml.instruct! :xml, version: '1.0'
xml.root simple: 'foo', 'xmlns:example': 'http://www.example.com/example.dtd' do
  xml.container do
    xml.element 'A normal element'
    xml.example :namespaced_element, 'An element in the "example" namespace'
  end
  xml.example :namespaced_container do
    xml.element_with_attribute 'Another element', attribute: 'foo'
    xml.example :namespaced_element_with_attribute, 'Another namespaced element', attribute: 'bar'
  end
  xml.container_with_attribute attribute: 'baz' do
    xml.empty_element
    xml.example :namespaced_empty_element
  end
  xml.example :namespaced_container_with_attribute, attribute: 'qux' do
    xml.empty_element_with_attribute attribute: 'quux'
    xml.example :namespaced_empty_element_with_attribute, attribute: 'corge'
  end
end
...