1 回答

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊
PHP 就是問題所在。它存在微妙的錯(cuò)誤,并且不會(huì)/不能正確理解以編程方式創(chuàng)建的文檔中的 XML 名稱空間。
添加/編輯 DOMDocument 元素的方法有多種,其中一些/大部分可能會(huì)導(dǎo)致元素E位于某個(gè)名稱空間X中,當(dāng)您僅查看 XML 輸出時(shí),但 DOMDocument 對象認(rèn)為它位于名稱空間Y中。即使您只使用提供的函數(shù)而不訪問對象的內(nèi)部,也可能使它們處于不一致的狀態(tài)。在某些情況下,如果您想要特定格式的命名空間(由于規(guī)范化問題)甚至是不可避免的。
替換該行代碼
$myDocument->schemaValidate();
和
$myDocument->loadXML($myDocument->saveXML()); $myDocument->schemaValidate();
并且驗(yàn)證錯(cuò)誤應(yīng)該消失。無論哪種方式(使用xsd
包含的自定義或直接使用 xmldsig 驗(yàn)證文件)都應(yīng)該有效。
雖然該錯(cuò)誤被視為“不是錯(cuò)誤”,但它確實(shí)是一個(gè)問題,因?yàn)?code>DOMDOcument實(shí)際上不會(huì)使用xmlns
屬性輸出確切的語法,而是使用前綴表示法(如果您使用createElementNS()
.?(雖然語法上可能是相同的,但沒有人理解 xml 命名空間,因此接受您的 XML 的人可能希望它與示例完全相同,即:使用 ,而xmlns
不是使用元素ds:Signature
)。
相反, usingDOMElement::setAttributeNS($currentNS, 'xmlns', $subElementNS)
?會(huì)輸出默認(rèn)命名空間標(biāo)記,但不會(huì)使用新命名空間正確遞歸地標(biāo)記元素下的編程實(shí)體。
- 1 回答
- 0 關(guān)注
- 137 瀏覽
添加回答
舉報(bào)