yii PHP -从XML标记中删除前导空格和尾随空格

a8jjtwal  于 2022-11-09  发布在  PHP
关注(0)|答案(2)|浏览(164)

如何删除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类中有他们的任何构建吗?
预期的XML:

<?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>

先谢谢你。

xyhw6mcr

xyhw6mcr1#

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

function trimNodes(DOMNode $node) {
  foreach ($node->childNodes as $child){
    if($child->hasChildNodes()) {
      trimNodes($child);
    } else{
      $child->nodeValue = trim($child->nodeValue);
    }
  }    
}

调用这个函数并向它发送$doc,然后你就会得到你想要的XML。请注意你的XML需要有一个根节点。你目前有两个根节点(anothertag,note),把它们 Package 在一个根节点中。

eiee3dmh

eiee3dmh2#

如果$sampleXML只是一个字符串,那么我认为一个正则表达式可以给予您要查找的内容:

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

相关问题