将 XML 转换为 PHP 中的对象,然后再次将该对象转换为 XML?
Convert XML to Object in PHP and again convert that Object to XML?
假设我有一个 XML 如下 -
$xml = '<?xml version="1.0"?>
<step number="9">
<s_name>test</s_name>
<b_sel>12345</b_sel>
<b_ind>7</b_ind>
</step>';
我希望将其转换为对象,但是当我执行以下步骤时,它会给我 stdclass 对象,如下所示 [我将其分配给 $stepInformation 变量] -
$xml = json_decode(json_encode((array) simplexml_load_string($xml)), 1);
$stepInformation = stdClass Object
(
[@attributes] => Array
(
[number] => 9
)
[s_name] => test
[b_sel] => 12345
[b_ind] => 7
)
所以当我在 php 函数中解析这个 stdclass 对象时
function convertStepInformationToArray($stepInformation)
{
$dom = new DOMDocument();
$stepInfo = "{$stepInformation->s_name}{$stepInformation->b_sel}{$stepInformation->b_ind}";
$dom->loadXML("<document>" . $stepInfo . "</document>");
$domx = new DOMXPath($dom);
$entries = $domx->evaluate("//step");
return $entries;
}
我得到的输出是
DOMNodeList Object
(
[length] => 0
)
我希望 [length] => 1
继续我的项目。我知道问题出在 <step number="9">
上,将其转换为对象后如下所示。
stdClass Object
(
[@attributes] => Array
(
[number] => 9
)
注意- 我什至尝试了以下步骤但没有成功:
$xml = simplexml_load_string($xml);
$stepInformation = SimpleXMLElement Object
(
[@attributes] => Array
(
[number] => 9
)
[s_name] => test
[b_sel] => 12345
[b_ind] => 7
)
你们能给我一些建议吗,我怎样才能得到如下输出?任何替代方法都可以,只要我得到准确的输出 -
DOMNodeList Object
(
[length] => 1
)
如有任何帮助,我们将不胜感激。
谢谢。
您实际上不需要将 SimpleXML
对象加载到 json_encode/decode
。
您已经可以使用该对象并解析您需要的任何值。必须 encode/decode
作为数组并访问值然后将其转换为 SimpleXML
太多了。
$xml = '<?xml version="1.0"?>
<step number="9">
<s_name>test</s_name>
<b_sel>12345</b_sel>
<b_ind>7</b_ind>
</step>';
$xml = simplexml_load_string($xml);
$step = $xml->xpath('//step');
echo $step[0]->attributes()->number; // 9
echo $xml->s_name, '<br/>', $xml->s_name, '<br/>', $xml->b_ind;
单独 DOMDocument
:
$dom = new DOMDocument;
$dom->loadXML($xml);
$xpath = new DOMXpath($dom);
echo $xpath->evaluate('string(//step/@number)');
保持简单:
$xml = '<?xml version="1.0"?>
<step number="9">
<s_name>test</s_name>
<b_sel>12345</b_sel>
<b_ind>7</b_ind>
</step>';
function convertStepInformationToArray($stepInformation) {
$dom = new DOMDocument();
$dom->loadXML($stepInformation);
$domx = new DOMXPath($dom);
$entries = $domx->evaluate("//step");
return $entries;
}
print_r(convertStepInformationToArray($xml));
假设我有一个 XML 如下 -
$xml = '<?xml version="1.0"?>
<step number="9">
<s_name>test</s_name>
<b_sel>12345</b_sel>
<b_ind>7</b_ind>
</step>';
我希望将其转换为对象,但是当我执行以下步骤时,它会给我 stdclass 对象,如下所示 [我将其分配给 $stepInformation 变量] -
$xml = json_decode(json_encode((array) simplexml_load_string($xml)), 1);
$stepInformation = stdClass Object
(
[@attributes] => Array
(
[number] => 9
)
[s_name] => test
[b_sel] => 12345
[b_ind] => 7
)
所以当我在 php 函数中解析这个 stdclass 对象时
function convertStepInformationToArray($stepInformation)
{
$dom = new DOMDocument();
$stepInfo = "{$stepInformation->s_name}{$stepInformation->b_sel}{$stepInformation->b_ind}";
$dom->loadXML("<document>" . $stepInfo . "</document>");
$domx = new DOMXPath($dom);
$entries = $domx->evaluate("//step");
return $entries;
}
我得到的输出是
DOMNodeList Object
(
[length] => 0
)
我希望 [length] => 1
继续我的项目。我知道问题出在 <step number="9">
上,将其转换为对象后如下所示。
stdClass Object
(
[@attributes] => Array
(
[number] => 9
)
注意- 我什至尝试了以下步骤但没有成功:
$xml = simplexml_load_string($xml);
$stepInformation = SimpleXMLElement Object
(
[@attributes] => Array
(
[number] => 9
)
[s_name] => test
[b_sel] => 12345
[b_ind] => 7
)
你们能给我一些建议吗,我怎样才能得到如下输出?任何替代方法都可以,只要我得到准确的输出 -
DOMNodeList Object
(
[length] => 1
)
如有任何帮助,我们将不胜感激。
谢谢。
您实际上不需要将 SimpleXML
对象加载到 json_encode/decode
。
您已经可以使用该对象并解析您需要的任何值。必须 encode/decode
作为数组并访问值然后将其转换为 SimpleXML
太多了。
$xml = '<?xml version="1.0"?>
<step number="9">
<s_name>test</s_name>
<b_sel>12345</b_sel>
<b_ind>7</b_ind>
</step>';
$xml = simplexml_load_string($xml);
$step = $xml->xpath('//step');
echo $step[0]->attributes()->number; // 9
echo $xml->s_name, '<br/>', $xml->s_name, '<br/>', $xml->b_ind;
单独 DOMDocument
:
$dom = new DOMDocument;
$dom->loadXML($xml);
$xpath = new DOMXpath($dom);
echo $xpath->evaluate('string(//step/@number)');
保持简单:
$xml = '<?xml version="1.0"?>
<step number="9">
<s_name>test</s_name>
<b_sel>12345</b_sel>
<b_ind>7</b_ind>
</step>';
function convertStepInformationToArray($stepInformation) {
$dom = new DOMDocument();
$dom->loadXML($stepInformation);
$domx = new DOMXPath($dom);
$entries = $domx->evaluate("//step");
return $entries;
}
print_r(convertStepInformationToArray($xml));