如何删除打开和关闭 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 需要有一个根节点。您当前有两个根节点(另一个标签,请注意),将它们包装在一个根节点中。
慕桂英3389331
TA贡献2036条经验 获得超8个赞
如果$sampleXML只是一个字符串,那么我认为正则表达式可以为您提供您正在寻找的内容:
$pattern = '/(?<=\>)\s+(?=[a-zA-Z0-9,\.\_])|(?<=[a-zA-Z0-9,\.\_])\s+(?=\<)/';
$sampleXML = preg_replace($pattern, '', $sampleXML);
- 2 回答
- 0 关注
- 134 浏览
添加回答
举报
0/150
提交
取消