我创建一个数组,然后将 0..n 个元素压入数组中的子数组之一 (最容易明白我在下面的代码中的意思)
当我通过 XML_Serializer 运行数组时,它会在推送的元素周围添加额外的标签
$serializer_options = array(
XML_SERIALIZER_OPTION_INDENT => ' ',
XML_SERIALIZER_OPTION_RETURN_RESULT => TRUE,
rootName => 'JZ_2103'
);
$serializer = &new XML_Serializer($serializer_options);
$otXmlArr = array(
'status' => 'success',
'reason' => 'null',
'payload' => array(
'ContactsResponse' => array()
)
);
foreach ($mydata as $item) {
array_push($otXmlArr['payload']['ContactsResponse'],
array(
'Contact' => array(
'ID' => $item['id'],
'FirstName' => $item['fname']
)
)
);
}
$otXml = $serializer->serialize($otXmlArr);
创建的 xml 有额外的标签 <XML_Serializer_Tag> .如何消除这些标签?
<JZ_2103>
<status>success</status>
<reason>null</reason>
<payload>
<ContactsResponse>
<XML_Serializer_Tag>
<Contact>
<ID>10</ID>
<FirstName>Roy</FirstName>
</Contact>
</XML_Serializer_Tag>
</ContactsResponse>
</payload>
</JZ_2103>
Abstr 的解决方案几乎可行 - 它产生:
来自数组的print_r:
Array
(
[status] => success
[reason] => null
[payload] => Array
(
[ContactsResponse] => Array
(
[0] => Array
(
[Contact] => Array
(
[ID] => 3
[FirstName] => Joe
)
)
[1] => Array
(
[Contact] => Array
(
[ID] => 4
[FirstName] => Fred
)
)
)
)
)
序列化 XML:
<JZ_2103>
<status>success</status>
<reason>null</reason>
<payload>
<ContactsResponse>
<Contact>
<ID>3</ID>
<FirstName>Joe</FirstName>
</Contact>
</ContactsResponse>
<ContactsResponse>
<Contact>
<ID>4</ID>
<FirstName>Fred</FirstName>
</Contact>
</ContactsResponse>
</payload>
</JZ_2103>
根据 Daniel 的建议,XML 输出为: 额外的嵌套级别:-(
<JZ_2103>
<status>success</status>
<reason>null</reason>
<payload>
<ContactsResponse>
<Contact>
<Contact>
<ID>3</ID>
<FirstName>Joe</FirstName>
</Contact>
</Contact>
<Contact>
<Contact>
<ID>4</ID>
<FirstName>Fred</FirstName>
</Contact>
</Contact>
</ContactsResponse>
</payload>
</JZ_2103>
我打算放弃使用序列化程序,而直接使用我认为的 simpleXml 构建 xml。这一切都是为了节省时间而开始的,很明显,它没有!
感谢 Daniel 和 Abstr 的帮助,即使这并没有让我到达终点。
最佳答案
将 'mode' => 'simplexml' 添加到 $serializer_options 应该:
$serializer_options = array(
XML_SERIALIZER_OPTION_INDENT => ' ',
XML_SERIALIZER_OPTION_RETURN_RESULT => TRUE,
'rootName' => 'JZ_2103',
'mode' => 'simplexml',
);
或者使用常量,
$serializer_options = array(
XML_SERIALIZER_OPTION_INDENT => ' ',
XML_SERIALIZER_OPTION_RETURN_RESULT => TRUE,
XML_SERIALIZER_OPTION_ROOT_NAME => 'JZ_2103',
XML_SERIALIZER_OPTION_MODE => XML_SERIALIZER_MODE_SIMPLEXML,
);
找到了 here在第 515 行。
// use XML_SERIALIZER_MODE_SIMPLEXML to use parent name as tagname
// if transforming an indexed array
XML_SERIALIZER_OPTION_MODE => XML_SERIALIZER_MODE_DEFAULT,
编辑:更新为指向实际的 XML_Serializer 代码库。
应该对代码进行如下更改(感谢@danielpsc,请参阅评论):
$otXmlArr = array(
'status' => 'success',
'reason' => 'null',
'payload' => array(
'ContactsResponse' => array(
'Contact' => array()
)
)
);
foreach ($mydata as $item) {
array_push($otXmlArr['payload']['ContactsResponse']['Contact'],
array(
'ID' => $item['id'],
'FirstName' => $item['fname']
)
);
}
EDIT2:对代码进行了更改
关于php - pear XML_Serializer - 消除多余的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19033706/
我试图使用yard记录一些Ruby代码,尽管我所做的正是所描述的here或here#@param[Integer]thenumberoftrials(>=0)#@param[Float]successprobabilityineachtrialdefinitialize(n,p)#initialize...end虽然我仍然得到这个奇怪的错误@paramtaghasunknownparametername:the@paramtaghasunknownparametername:success然后生成的html看起来很奇怪。我称yard为:$yarddoc-mmarkdown我做错了什么?
我有一个div,它根据表单是否正确提交而改变。我想知道是否可以检查类的特定元素?开始元素看起来像这样。如果输入不正确,添加错误类。 最佳答案 试试这个:browser.div(:id=>"myerrortest").class_name更多信息:http://watir.github.com/watir-webdriver/doc/Watir/HTMLElement.html#class_name-instance_method另一种选择是只查看具有您期望的类的div是否存在browser.div((:id=>"myerrortes
我有这样的HTML代码:Label1Value1Label2Value2...我的代码不起作用。doc.css("first").eachdo|item|label=item.css("dt")value=item.css("dd")end显示所有首先标记,然后标记标签,我需要“标签:值” 最佳答案 首先,您的HTML应该有和中的元素:Label1Value1Label2Value2...但这不会改变您解析它的方式。你想找到s并遍历它们,然后在每个你可以使用next_element得到;像这样:doc=Nokogiri::HTML(
我有以下不起作用的代码:=form_for(resource,:as=>resource_name,:url=>session_path(resource_name),:html=>{:class=>"well"})do|f|=f.label:email=f.email_field:email=f.label:password=f.password_field:password-ifdevise_mapping.rememberable?%p=f.label:remember_me,:class=>"checkbox"=f.check_box:remember_me,:class=>"
我正在遍历数组中的一组标签名称,我想使用构建器打印每个标签名称,而不是求助于“我认为:builder=Nokogiri::XML::Builder.newdo|xml|fortagintagsxml.tag!tag,somevalendend会这样做,但它只是创建名称为“tag”的标签,并将标签变量作为元素的文本值。有人可以帮忙吗?这个看起来应该比较简单,我刚刚在搜索引擎上找不到答案。我可能没有以正确的方式提问。 最佳答案 尝试以下操作。如果我没记错的话,我添加了一个根节点,因为Nokogiri需要一个。builder=Nokogi
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
我有一个偏爱:如何将像o.office这样的值插入到属性中?value="#{o.office}"无效。 最佳答案 'type='text'/>或者你可以使用表单助手 关于ruby-on-rails-如何将变量值插入ERB模板中的HTML标签?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6172174/
是否可以从Ruby中的HTMLblock中提取IMG标签(或只是IMG标签的src属性)?例如,如果我有一个HTMLblock,例如:Loremipsumdolorsitamet,laboreetdoloremagnaaliqua.Duisauteiruredolorinreprehenderitinvoluptatevelitessecillumdoloreeufugiatnullapariatur.我可以通过正则表达式或其他方法只提取IMG标签或该IMG标签的src吗?提前感谢您的任何建议! 最佳答案 使用Nokogiri:re
所以我正在使用acts_as_taggablegem提供的标签。这些帖子是我正在标记的内容。我怎么能说类似=>的东西(这里是伪代码)ifacollectionofPostshasatagwithacorrespondingStockQuote,displaythestockquote所以现在我有一个acts_as_taggable的Post资源。这是我的帖子索引操作现在的样子:defindex@stock=StockQuote::Stock.quote("symbol")ifparams[:tag]@posts=Post.tagged_with(params[:tag])else@po
在我的表单中,我使用了如下的span标签:在我选择值后,它在HTML中看起来像下面这样:Antony问题是当我们创建表单时,id没有获取到数据库的值。我不知道确切的问题是。我想使用此内容标签而不是text_field来获取值。谢谢。 最佳答案 当您提交HTML表单时,唯一被POST的值是输入字段中的值,例如文本字段、选择、复选框、按钮等。页面上的内容——无论是否在跨度内--不会发回服务器。这不是Rails的问题,这只是HTML的工作方式。我不太确定你在这里想做什么,但是当你想显示一个值(而不是在输入框中)并将值与表单一起发回时,一种