第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

PHP xmllib XSD 驗(yàn)證命名空間錯(cuò)誤:沒想到 X,預(yù)期 X

PHP xmllib XSD 驗(yàn)證命名空間錯(cuò)誤:沒想到 X,預(yù)期 X

PHP
慕沐林林 2023-07-08 20:39:29
我一直在嘗試讓 xmllib 通過 合作并驗(yàn)證 xmldsig<Signature>元素DOMDocument,但無論我如何將元素扔給它,它都會(huì)不斷產(chǎn)生虛假錯(cuò)誤。顯然,由于而無法<Signature>成為 root 。我無法正確設(shè)置根上的屬性:嘗試驗(yàn)證結(jié)果:DOMDocumentxmlnsElement 'Signature': No matching global declaration available for the validation root. 我認(rèn)為這可能是因?yàn)槟J街荚凇鞍?,您畢竟想要簽署“某些東西”,而不僅僅是本身簽名。因此,通過創(chuàng)建這個(gè):<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"    xmlns:ds="http://www.w3.org/2000/09/xmldsig#"    version="1.0"    elementFormDefault="qualified"><xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd" /><xs:element name="root">    <xs:complexType>        <xs:sequence>            <xs:element ref="ds:Signature" />        </xs:sequence>    </xs:complexType></xs:element></xs:schema>我現(xiàn)在可以擁有虛擬元素的包含簽名。我意識到 PHP XML 處理相當(dāng)糟糕,沒有一個(gè)工具真正工作得那么好。然而,一旦它實(shí)際上正確地將事情交給 xmllint,這樣做應(yīng)該沒有問題。其他答案建議也添加 XPath,但我想保持 KISS;盡可能少地使用 PHP 庫。通過幾百行代碼的欺騙,我讓它配合并將<Signature>xml 文件的一部分包裝到一個(gè)<root>元素內(nèi)的普通測試文件中。我認(rèn)為它正在做一些事情來破壞文檔中的名稱空間。$myDocument->saveXML();失敗后調(diào)用$myDocument->schemaValidate();會(huì)返回一個(gè)特殊的結(jié)果:Element 'Signature': This element is not expected. Expected is ( {http://www.w3.org/2000/09/xmldsig#}Signature ).當(dāng) xml 看起來像這樣時(shí)(我已經(jīng)添加了格式;實(shí)際情況是未格式化的;盡管空格不應(yīng)該很重要):<?xml version="1.0"?><root>    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">         (... omitted crypto ...)    </Signature></root>從我對它所做的閱讀來看,該錯(cuò)誤應(yīng)該意味著<Signature> 元素上的命名空間是錯(cuò)誤的。但在這里,它明確地明確指定為xmlns錯(cuò)誤消息所期望的內(nèi)容。那么,這里出了什么問題呢?附錄:準(zhǔn)備簽名進(jìn)行驗(yàn)證的代碼(在任意文檔中)看起來像這樣。這是一個(gè)復(fù)雜的版本,我添加了一個(gè)“根”元素,而不是直接使用模式,請參閱下面的我的答案,結(jié)果證明這是不必要的,盡管這是一個(gè)很好的測試,就像在您想要的更復(fù)雜的場景中一樣要在對 libxml 的一次調(diào)用中驗(yàn)證簽名的內(nèi)容,這是一件有效的事情:
查看完整描述

1 回答

?
MM們

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í)體。


查看完整回答
反對 回復(fù) 2023-07-08
  • 1 回答
  • 0 關(guān)注
  • 137 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號