Php 将XML提要的某些值添加到一起,然后输出

Php 将XML提要的某些值添加到一起,然后输出,php,curl,Php,Curl,嗨,不知道是否有人能帮我 下面的第一段代码基本上统计了每个XML记录,并以所需的格式输出 旧代码 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://xxxxx'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $xml_string = curl_exec ($ch); curl_close ($ch); // parse data $xml=simplexml_load_string

嗨,不知道是否有人能帮我

下面的第一段代码基本上统计了每个XML记录,并以所需的格式输出

旧代码

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://xxxxx');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$xml_string = curl_exec ($ch);
curl_close ($ch);

// parse data
$xml=simplexml_load_string($xml_string);

// fix to n slots, zero padded
$slots=6;
$counter = substr((string)(pow(10,$slots)+count($xml)),1,$slots);

for($c=0; $c<strlen($counter); $c++)
{
    echo("<span>".$counter[$c]."</span>");
}
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'http://xxxxx');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$xml\u string=curl\u exec($ch);
卷曲关闭($ch);
//解析数据
$xml=simplexml\u load\u字符串($xml\u字符串);
//固定到n个插槽,零填充
$slots=6;
$counter=substr((字符串)(pow(10,$slots)+count($xml)),1,$slots);
for($c=0;$c是实现这一点的最简单方法。鉴于您提供的XML:

$xml = '
<Data>
    <Row>
        <Column name="cam" type="xs:int">000</Column>
        <Column name="camN" type="xs:string">hello</Column>
        <Column name="numer" type="xs:int">5220</Column>
    </Row>
    <Row>
        <Column name="cam" type="xs:int">000</Column>
        <Column name="camN" type="xs:string">hello</Column>
        <Column name="numer" type="xs:int">4220</Column>
    </Row>
    <Row>
        <Column name="cam" type="xs:int">000</Column>
        <Column name="camN" type="xs:string">hello</Column>
        <Column name="numer" type="xs:int">3220</Column>
    </Row>      
</Data>
';

$xml = simplexml_load_string($xml);
$numer_sum = 0;

// sums the value of columns
foreach ($xml->Row as $row) {
  $numer_sum += (int)$row->Column[2];
}
是执行此操作的最简单方法。给定您提供的XML:

$xml = '
<Data>
    <Row>
        <Column name="cam" type="xs:int">000</Column>
        <Column name="camN" type="xs:string">hello</Column>
        <Column name="numer" type="xs:int">5220</Column>
    </Row>
    <Row>
        <Column name="cam" type="xs:int">000</Column>
        <Column name="camN" type="xs:string">hello</Column>
        <Column name="numer" type="xs:int">4220</Column>
    </Row>
    <Row>
        <Column name="cam" type="xs:int">000</Column>
        <Column name="camN" type="xs:string">hello</Column>
        <Column name="numer" type="xs:int">3220</Column>
    </Row>      
</Data>
';

$xml = simplexml_load_string($xml);
$numer_sum = 0;

// sums the value of columns
foreach ($xml->Row as $row) {
  $numer_sum += (int)$row->Column[2];
}

您可以使用xpath获取所需的节点,如下所示:

$xml = simplexml_load_string( $xml);
$elements = $xml->xpath( "/Data/Row/Column[@name='numer']");
$sum = 0;
foreach( $elements as $el)
{
    $sum += $el[0];
}
echo $sum; // Prints 12660
$formatted = sprintf('%06d', $sum);
echo '<span>' . implode( '</span><span>', str_split( $formatted)) . '</span>';
现在,要获得所需的输出,请用零填充数字,将其拆分为1个字符的块,然后输出,如下所示:

$xml = simplexml_load_string( $xml);
$elements = $xml->xpath( "/Data/Row/Column[@name='numer']");
$sum = 0;
foreach( $elements as $el)
{
    $sum += $el[0];
}
echo $sum; // Prints 12660
$formatted = sprintf('%06d', $sum);
echo '<span>' . implode( '</span><span>', str_split( $formatted)) . '</span>';
$formatted=sprintf('%06d',$sum);
回显“”。内爆(“”,str_split($formatted))。';

您可以使用xpath获取所需的节点,如下所示:

$xml = simplexml_load_string( $xml);
$elements = $xml->xpath( "/Data/Row/Column[@name='numer']");
$sum = 0;
foreach( $elements as $el)
{
    $sum += $el[0];
}
echo $sum; // Prints 12660
$formatted = sprintf('%06d', $sum);
echo '<span>' . implode( '</span><span>', str_split( $formatted)) . '</span>';
现在,要获得所需的输出,请用零填充数字,将其拆分为1个字符的块,然后输出,如下所示:

$xml = simplexml_load_string( $xml);
$elements = $xml->xpath( "/Data/Row/Column[@name='numer']");
$sum = 0;
foreach( $elements as $el)
{
    $sum += $el[0];
}
echo $sum; // Prints 12660
$formatted = sprintf('%06d', $sum);
echo '<span>' . implode( '</span><span>', str_split( $formatted)) . '</span>';
$formatted=sprintf('%06d',$sum);
回显“”。内爆(“”,str_split($formatted))。';

我不理解所需的输出。新XML上的哪些值应该求和?抱歉,更新了我的帖子抱歉,遗漏了这一点。我不理解所需的输出。新XML上的哪些值应该求和?抱歉,更新了我的帖子抱歉,遗漏了这一点。谢谢。我如何确保即使值为400,也始终有6个字符需要它输出000400,跨度为四舍五入ea值,如上所述。调用sprintf将处理该
:)
-这就是为什么它有
%06d
,这意味着将数字格式化为宽度为6的十进制值,如果不是6位数,则用零填充数字。非常感谢您在这方面的帮助,今天我学到了一些新东西。。。。现在它确实导出了6位数字,但由于某些原因,它们都是0,它们应该是一个值,因为我知道xml有值要加起来,让我看看这一个排序它(我很愚蠢)我只想对nickb和rdlowrey在这方面的帮助表示感谢,你帮了我很多。。。再次感谢您谢谢您我如何始终确保它的6个字符,即使值为400,我需要它输出000400和上面的ea值。对sprintf的调用将处理该问题
:)
-这就是为什么它有
%06d
,这意味着将数字格式化为宽度为6的十进制值,如果不是6位数,就用零填充数字。非常感谢你在这方面的帮助,我今天学到了一些新的东西。。。。现在它确实导出了6位数字,但由于某些原因,它们都是0,它们应该是一个值,因为我知道xml有值要加起来,让我看看这一个排序它(我很愚蠢)我只想对nickb和rdlowrey在这方面的帮助表示感谢,你帮了我很多。。。再次感谢您的回复谢谢您的回复我问了一个关于以下格式的问题,您的问题清楚地表明您已经控制了代码的这一部分。XML中的更改不会影响连接字符串的能力。我无法为您编写代码,这不是我的目的。谢谢您的回答。我在下面问了一个重新格式化的问题。好吧,您的问题清楚地表明您已经控制了代码的这一部分。XML中的更改不会影响连接字符串的能力。我不能为你写代码,这不是为什么。