Разбор нулевых XML-элементов с ActiveResource - PullRequest
1 голос
/ 15 февраля 2012

Я использую ActiveResource для анализа следующего XML:

<deploymentNotifications>
    <platformTest>Todd</platformTest>
    <domainTest xsi:nil="true"/>
    <systemTest xsi:nil="true"/>
    <production xsi:nil="true"/>
</deploymentNotifications>

Вывод для @deploymentNotifications.platformTest - это именно то, что я ожидал;а именно, "Тодд".Вывод для трех nil-элементов, тем не менее, выглядит следующим образом:

"domainTest"=>
    #<Application::DeploymentNotifications::DomainTest:0x007f7f8df7a198
        @attributes={
            "xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance",
            "xsi:nil"=>"true"},
        @prefix_options={},
        @persisted=false>

Я предполагаю, что ActiveResource никоим образом не рассматривает xsi:nil как особенное, но я не уверен.В идеале то, что я хотел бы закончить (будь то использование ActiveResource напрямую или через комбинацию ActiveResource и постобработки), это отображение, которое переносит нулевые элементы ввода в нулевые объекты Ruby:

#<Application::DeploymentNotifications:0x007f7f8ec6a290
    @attributes={
        "platformTest"=>"Todd",
        "domainTest"=>nil,
        "systemTest"=>nil,
        "production"=>nil},
    @prefix_options={},
    @persisted=false>

Что-то подобноелиний.Каков наилучший способ сделать это?

Я совершенно новичок в Ruby, поэтому, если мне нужна коррекция основного курса, дайте мне знать.

1 Ответ

1 голос
/ 17 марта 2012

Это может быть доступно прямо из парсера ActiveResource, но если нет, вы можете ввести Nokogiri, основываясь на этом посте :

ActiveSupport::XmlMini.backend = 'Nokogiri'
ActiveSupport::XmlMini.backend # => ActiveSupport::XmlMini_Nokogiri
# it will now use Nokogiri

Оттуда я сделал это, используя ваш XML изначало вашего поста:

@doc = Nokogiri::XML(File.open("willie.xml")) # willie.xml is your XML
@domain_test_Value = @doc.xpath("//domainTest").attribute("nil").value
puts @domain_test_Value
# "true"

Вы можете присвоить его хэшу @attributes или вашему объекту по мере необходимости.

Помогает ли это?

...