为了账号安全,请及时绑定邮箱和手机立即绑定

PHP - 删除 XML 标签中的前导和尾随空格

PHP - 删除 XML 标签中的前导和尾随空格

PHP
哔哔one 2023-10-22 22:02:28
如何删除打开和关闭 XML 之间的前导和尾随空格?$sampleXML = '<?xml version="1.0" encoding="ISO-8859-1"?>  <note>    <PersonName>        <GivenName> David </GivenName>        <MiddleName> Raj</MiddleName>        <Affix>JR</Affix>    </PersonName>    <Aliases>        <PersonName>            <GivenName></GivenName>            <MiddleName></MiddleName>            <FamilyName></FamilyName>        </PersonName>    </Aliases>    <DemographicDetail>        <GovernmentId countryCode="US">testIDs data  </GovernmentId>        <DateOfBirth>2000-12-12</DateOfBirth>    </DemographicDetail></note><anothertag>    <data type="credit">        <Vendor score="yes"> vendor name  </Vendor>    </data></anothertag>';$doc = new DOMDocument;$doc->loadXML($xml);foreach ($doc->documentElement->childNodes as $node) {}$xpath = new DOMXpath($doc);$xml = $doc->saveXML($doc, LIBXML_NOEMPTYTAG);我尝试过使用 getElementsByTagName。但标签名称是动态的。所以在这种情况下它对我不起作用。他们在 php 类中有任何 bulid 吗?
查看完整描述

2 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

您可以遍历所有节点并修剪节点值,为此您需要一个递归函数来遍历所有节点:


function trimNodes(DOMNode $node) {

  foreach ($node->childNodes as $child){

    if($child->hasChildNodes()) {

      trimNodes($child);

    } else{

      $child->nodeValue = trim($child->nodeValue);

    }

  }    

}

调用这个函数并将 $doc 发送给它,然后你将得到你想要的 XML。请注意您的 XML 需要有一个根节点。您当前有两个根节点(另一个标签,请注意),将它们包装在一个根节点中。


查看完整回答
反对 回复 2023-10-22
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

如果$sampleXML只是一个字符串,那么我认为正则表达式可以为您提供您正在寻找的内容:


$pattern = '/(?<=\>)\s+(?=[a-zA-Z0-9,\.\_])|(?<=[a-zA-Z0-9,\.\_])\s+(?=\<)/';

$sampleXML = preg_replace($pattern, '', $sampleXML);


查看完整回答
反对 回复 2023-10-22
  • 2 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信