【发布时间】:2016-12-13 18:47:56
【问题描述】:
我需要使用一些非常简单快捷的解决方案将 XML 文件转换为数组。这个对我来说很好看:
json_decode(json_encode(simplexml_load_string($xmlContent, "SimpleXMLElement", LIBXML_NOCDATA)), true);
这样做的问题是,它将多个子元素视为一个索引数组,每个子元素由一个关联数组组成,但如果父标记中只有一个子元素,它不会创建一个包含一个元素的索引数组并放置一个将数组直接关联到父标记元素。我需要这些场景的输出保持一致。 IE。索引数组首先不取决于孩子的数量。我的目标是解析后的一致模式。
多个孩子的例子:
输入:
<PICK_NOTE_LINES>
<LINE>
<PICK_LINE_NUM>1</PICK_LINE_NUM>
<PRODUCT_CODE>3342</PRODUCT_CODE>
<BATCH_CODE></BATCH_CODE>
<QUANTITY>1</QUANTITY>
</LINE>
<LINE>
<PICK_LINE_NUM>2</PICK_LINE_NUM>
<PRODUCT_CODE>5285</PRODUCT_CODE>
<BATCH_CODE></BATCH_CODE>
<QUANTITY>1</QUANTITY>
</LINE>
</PICK_NOTE_LINES>
输出(LINE 父元素中的索引数组):
['PICK_NOTE_LINES'=>['LINE'=>[['PICK_LINE_NUM'=>1, ...],['PICK_LINE_NUM'=>2, ...]]]
一个孩子的例子:
<PICK_NOTE_LINES>
<LINE>
<PICK_LINE_NUM>1</PICK_LINE_NUM>
<PRODUCT_CODE>3342</PRODUCT_CODE>
<BATCH_CODE></BATCH_CODE>
<QUANTITY>1</QUANTITY>
</LINE>
</PICK_NOTE_LINES>
输出(行父元素中的关联数组):
['PICK_NOTE_LINES'=> ['LINE'=>['PICK_LINE_NUM'=>1, ...]]]
是否有可能让它总是将孩子放入索引数组中,即使它只有一个孩子?如果不可能,我可以使用什么来获得一致的输出?
【问题讨论】:
-
显然,您当前的代码不可能。修改它来做你需要的事情
-
@u_mulder 我想也许有一些解析器选项可以做到这一点。
标签: php xml xml-parsing simplexml