简体   繁体   English

如何删除xml标记之间的空白

[英]how to remove white space between xml tags

i have a xml file, when i have load this file using DOMDocument:: load and save it gives white space, please suggest how to remove this white space. 我有一个xml文件,当我使用DOMDocument ::加载此文件时,加载并保存它会产生空白,请建议如何删除此空白。 Below is my code. 下面是我的代码。

    $file = 'myfile.xml' 
    $doc = new DOMDocument('1.0', 'utf-8');
    $doc->preserveWhiteSpace = false;
    $doc->load($file);
    echo htmlentities($doc->saveXML());exit;

It give output like this 它给出这样的输出

<?xml version="1.0"?> <Esign ver="2.0"></Esign>

how to remove this space 如何删除这个空间

Actually i am trying to perform digital signature below is my function for digital signature, In this function i found that space added after $doc->load($file) 实际上我正在尝试执行数字签名,以下是我的数字签名功能,在此功能中,我发现在$ doc-> load($ file)之后添加了空格

public function digital_sign($file){

    $doc = new DOMDocument('1.0', 'utf-8');
    $doc->preserveWhiteSpace = false;

    $doc->load($file);

    // Create a new Security object
    $objDSig = new XMLSecurityDSig();
    // Use the c14n exclusive canonicalization
    $objDSig->setCanonicalMethod(XMLSecurityDSig::C14N_COMMENTS);
    // Sign using SHA-256
    $objDSig->addReference($doc,XMLSecurityDSig::SHA256,array('http://www.w3.org/2000/09/xmldsig#enveloped-signature'),array('force_uri'=>'true'));

    // Create a new (private) Security key
    $objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA256, array('type'=>'private'));
    // Load the private key
    $objKey->loadKey('private_key.pem', TRUE);

    $objDSig->sign($objKey);

    // Add the associated public key to the signature
    $options['subjectName'] = "true";
    $objDSig->add509Cert(file_get_contents('public_key.cer'),true,false,$options);

    // Append the signature to the XML
    $objDSig->appendSignature($doc->documentElement);

    $filenewpath = 'newfile1.xml';
    ob_clean();

    if($doc->save($filenewpath)){
      return true;
    }
  }

$file contain below xml $ file包含在xml下面

<Esign ver="2.0" sc="Y" ts="2018-03-30T07:10:47" txn="97051198" ekycMode="U" ekycId="88XXXXXXXXX" ekycIdType="A" aspId="ASPSXXXXXXXXXXX156" AuthMode="1" responseSigType="pkcs7" preVerified="n" organizationFlag="n" responseUrl="https://www.google.com"><Docs><InputHash id="1" hashAlgorithm="SHA256" docInfo="Test pdf">60bdd13ea4827b8de375c79dc3ff847f83b55bd73b6461523fdf8f843b5a0d5b</InputHash></Docs></Esign>

Output After signature 签名后输出

<?xml version="1.0"?> <Esign ver="2.0" sc="Y" ts="2018-03-30T07:21:03" txn="39242002" ekycMode="U" ekycId="88XXXXXXXXX" ekycIdType="A" aspId="ASPSXXXXXXXXXXX156" AuthMode="1" responseSigType="pkcs7" preVerified="n" organizationFlag="n" responseUrl="https://www.stage.kissht.com/welcome/email"><Docs><InputHash id="1" hashAlgorithm="SHA256" docInfo="Test pdf">60bdd13ea4827b8de375c79dc3ff847f83b55bd73b6461523fdf8f843b5a0d5b</InputHash></Docs><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>bstOvGSSvkuEcriLXk6Qj2nhzEb3BZ1oEUtOYoMFyCw=</DigestValue></Reference></SignedInfo><SignatureValue>Uj3aSvmbMhUJX5Bwj3Bk3/F5U6IFx4LMS1BWMLTeEtnMvcfrJo25YGZHQtt1CnPbT5ygKEU7dQ3IBRsghqDvG+VAHYbU9gfX1N/5NxLM15oGWhZ3oSlNv7ouS1Ajzvaiei/OTr83jlUVfTW/MftYo/z6wYFdZp6Gc+0Fp38RLTzYPLr0l34NN/dIBy5/+FDYc9yTJrkwqj4SEQelmt0mzbV2jMo1/Nbvf+BLJq4+QMBoqjCiAlqcqc2/xX6K1xlUrPRwy6FC7ymFMBth0+9HJ6KLIwO+8Q+iUZgj3YFQdry1YGVDF1YNSTo5YcJcqrXycLFjTK2PDFcJ4rJg56IaXA==</SignatureValue><KeyInfo><X509Data><X509SubjectName>CN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</X509SubjectName><X509Certificate>MIIGCDCCBPCgAwIBAgIEANFsFzANBgkqhkiG9w0BAQsFADCBkzELMAkGA1UEBhMCSU4xKjAoBgNVBAoTIWVNdWRocmEgQ29uc3VtZXIgU2VydmljZXMgTGltaXRlZDEdMBsGA1UECxMUQ2VydGlmeWluZyBBdXRob3JpdHkxOTA3BgNVBAMTMGUtTXVkaHJhIFN1YiBDQSBDbGFzcyAyIGZvciBEb2N1bWVudCBTaWduZXIgMjAxNDAeFw0xNzAyMjEwOTMwMjhaFw0xOTAyMjEwOTMwMjhaMIHwMQswCQYDVQQGEwJJTjEyMDAGA1UEChMpU0kgQ1JFVkEgQ0FQSVRBTCBTRVJWSUNFUyBQUklWQVRFIExJTUlURUQxCzAJBgNVBAsTAklUMQ8wDQYDVQQREwY0MDAwMTIxFDASBgNVBAgTC01BSEFSQVNIVFJBMQ8wDQYDVQQJEwZNVU1CQUkxNzA1BgNVBDMTLjIwMiAyMDMgUEVOSU5TVUxBIENFTlRSRSBEUiBTIFMgUkFPIFJPQUQgUEFSRUwxLzAtBgNVBAMTJkRTIFNJIENSRVZBIENBUElUQUwgU0VSVklDRVMgUFJJVkFURSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsi9KF+7r6qBvsM27zlyYqQHXw867koX3CNNw4onRPSoxFEv1yThaYSA5MUFp5OQlq7/wKWWhKh842BVRJ7ov7iLSUXHSEmvbw70czribN3Ps9xXnOeHT+REchBeshttjdaZ7NTMyITVPcL6rzZ3Z8FT1ce9vtl4akls9ghXRRBTatzP/QKztLcxyB7RkGXV+tESeAhPqnP9RsHbGLRCQdIo9yEc4nJxDvuItxdTs/BcUTLpxeYaUlYYhXAeMWmHMsm5EtGH6eTyG3kWyaFyQF2aMdwGALxaHHie/OtLWm5w1tecOfpymO6uhlC6dfzhQTBwgHJGw/8P+wSK7gQnQbfG3zSQiGJn2vjy9sHTbmJoLcOc5ZhyhaWSMymTepXKwXpI</X509Certificate></X509Data></KeyInfo></Signature></Esign>

how to remove this space 如何删除这个空间

<?xml version="1.0"?> <Esign

The saveXML() function creates a line-break after the <?xml ?> tag. saveXML()函数在<?xml ?>标记之后创建换行符。 Displayed in HTML environment, you see a "space". 在HTML环境中显示时,您会看到一个“空格”。

You can use str_replace() to remove this "\\n" before to use htmlentities() for this specific case: 在这种情况下,您可以使用str_replace()删除此"\\n"然后再使用htmlentities()

$file = 'myfile.xml';
$doc = new DOMDocument('1.0', 'utf-8');
$doc->preserveWhiteSpace = false;
$doc->load($file);
$xml = $doc->saveXML();
$xml = str_replace("?>\n<", '?><', $xml);
// $xml = str_replace("?>".PHP_EOL."<", '?><', $xml);
// $xml = preg_replace("~\?>\s+<~", '?><', $xml);
echo htmlentities($xml);
exit;

Will outputs: 将输出:

<?xml version="1.0"?><Esign ver="2.0"></Esign>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM