Я пытаюсь добавить дочерние узлы в корневой узел.. Я пробовал использовать приведенный ниже xml, но это не работает. Я новичок в Ruby и Nokogiri
builder = Nokogiri::XML::Builder.with(@doc) do |xml|
nodes = Nokogiri::XML::NodeSet.new(@doc, [])
[].each {|nodes_one_by_one|
<< nodes_one_by_one.Book
<< nodes_one_by_one.Pen
}
end
Мне нужно добавить узлы ниже корневого узла, как этот
<Catalog>
<Book>abc</Book>
<Book_Author>Benjamin</Book_author>
Это работает хорошо для меня.. но мне нужно добавить эти узлы после определенной позиции в документе.
<Catalog>
<!--
<Book>abc</Book>
<Book_Author>Benjamin</Book_author>
-->
<Interface></Interface>
<Dialog></Dialog>
<Manifest></Manifest>
</Catalog>
я попробовал это с помощью _xpath ('//Catlog' ), но он добавляется в конец элемента (, как вы сказали)
<Catalog>
<Interface></Interface>
<Dialog></Dialog>
<Manifest></Manifest>
<!--
<Book>abc</Book>
<Book_Author>Benjamin</Book_author>
-->
book = Nokogiri::XML::Node.new('book', doc)
pen = Nokogiri::XML::Node.new('pen', doc)
.
.
Есть ли способ зациклить, используя "каждый "вместо того, чтобы добавлять по одному.. Я пробовал так, но это не работает.
builder = Nokogiri ::XML ::Builder.with (doc )do |xml|
nodes = Nokogiri ::XML ::Node.new (doc, [])
[].each {|child _list _element|
дочерний _список _element.Book "значение" дочерний _список _element.Pen "значение" дочерний _список _element.Diary "значение" дочерний _список _element.Pen _стенд "значение" дочерний _список _element.Pencil "значение"...
}
конец
doc << nodes
Код может быть неправильным, но я хочу сделать так. Еще это похоже на... могу ли я добавить все элементы как NodeSet вместо Node. Пожалуйста, исправьте мой код.
Заранее спасибо
Вложенный OpenStruct не работает нормально.Я попытался использовать приведенный ниже пример
require 'ostruct'
require 'nokogiri'
collection = [
OpenStruct.new(:catalogStoreNumber => '657758',
:catalogStoreId => 'CTH6536',
:catalogStoreLocation => 'UnitedStates',
:catalogOwnerId => 'TYCT11190',
:catalogOwner => 'McGrawHill Pub.',
:catalogList => OpenStruct.new(
:catalogProductInfo => OpenStruct.new(
:productType => 'Book',
:productName => 'The Client',
:productId => 'CRSUS113246A',
:productCategory => 'Crime And Suspense',
:productSubcategory => 'Vintage Books',
:productPrice => '45.50 USD',
:productAuthor => OpenStruct.new(
:authorFirstName =>'John Grisham',
:authorMiddleName=> 'Willburt',
:authorContact => '19876648981')),
:catalogProductInfo => OpenStruct.new(
:productType => 'Pen',
:productName => 'Reynolds',
:productId => 'PRREY546647',
:productCategory => 'Misc. Stationary',
:productSubcategory => 'Stationery Items',
:productPrice => '3.00 USD',
:productManufacturer => 'Reynolds Inc.',
:productAuthor => OpenStruct.new(
:authorFirstName => 'Ryan Reynolds',
:authorMiddleName => 'William',
:authorContact => '16577589898')),
:catalogListType => 'ProductCollection',
:catalogListSource => 'Web'
),
:catalogVerificaitionLog => OpenStruct.new(
:catalogVerificationStatus => 'Verified',
:catalogVerificationDateTime => '2012-03-12T13:00:15+5:30',
:catalogVerificationId => '64774A',
:catalogVerificationRequestedBy => 'user_121')
)]
Я хочу получить доступ к «productType» первого «catalogProductInfo», и я сказал «коллекция.catalogList.catalogProductInfo.productType.content» и я получаю следующую ошибку
«неопределенный метод `productType» для#(NoMethodError)
Поддерживает ли OpenStruct вложенную OpenStruct. Я хочу построить XML в формате ниже, используя OpenStruct и Nokogiri?
<CatalogOrder>
<CatalogStoreNumber>657758</CatalogStoreNumber>
<CatalogStoreId>CTH6536</CatalogStoreId>
<CatalogStoreLocation>UnitedStates</CatalogStoreLocation>
<CatalogOwnerId>TYCT11190</CatalogOwnerId>
<CatalogOwner>McGrawHill Pub.</CatalogOwner>
<CatalogList>
<CatalogProductInfo>
<ProductType>Book</ProductType>
<ProductName>The Client</ProductName>
<ProductId>CRSUS113246A</ProductId>
<ProductCategory>Crime And Suspense</ProductCategory>
<ProductSubCategory>Vintage Books</ProductSubCategory>
<ProductPrice>45.50 USD</ProductPrice>
<ProductAuthor>
<AuthorFirstName>John Grisham</AuthorFirstName>
<AuthorMiddleName>Willbur</AuthorMiddleName>
<AuthorContact>19876648981</AuthorContact>
</ProductAuthor>
</CatalogProductInfo>
<CatalogProductInfo>
<ProductType>Pen</ProductType>
<ProductName>Reynolds</ProductName>
<ProductId>PRREY546647</ProductId>
<ProductCategory>Misc. Stationary</ProductCategory>
<ProductSubCategory>Stationary Items</ProductSubCategory>
<ProductPrice>3.00 USD</ProductPrice>
<ProductAuthor>
<AuthorFirstName>Ryan Reynolds</AuthorFirstName>
<AuthorMiddleName>William</AuthorMiddleName>
<AuthorContact>16577589898</AuthorContact>
</ProductAuthor>
</CatalogProductInfo>
<CatalogListType>ProductCollection</CatalogListType>
<CatalogListSource>Web</CatalogListSource>
</CatalogList>
<CatalogVerificationLog>
<CatalogVerificationStatus>Verified</CatalogVerificationStatus>
<CatalogVerificationDateTime>2012-03-12T13:00:15+5:30</CatalogVerificationDateTime>
<CatalogVerificationId>64774A</CatalogVerificationId>
<CatalogVerificationRequestedBy>User_121</CatalogVerificationRequestedBy>
</CatalogVerificationLog>
Я хочу добиться этого с помощью Nokogiri и OpenStruct, но я не уверен, возможно ли это с OpenStruct, так как в нем отсутствуют возможности вложенности. Есть ли другой способ использовать JSon для достижения этого без каких-либо выдающихся ограничений? Пожалуйста, исправьте мой более ранний код