を無視してPHPでDOMXPathを使うことの最大を持つXML属性を取得、私はXMLファイルがあります。名前空間
<Receipt Version="2.0" ReceiptDate="2012-08-30T23:10:05Z" CertificateId="A656B9B1B3AA509EEA30222E6D5E7DBDA9822DCD" xmlns="http://schemas.microsoft.com/windows/2012/store/receipt">
....
</Receipt>
を、私はPHPでXPathをCertificateId
を取得しよう:Msft
を持っているので
$doc = new DOMDocument();
$doc->loadXML($v);
$xpath = new DOMXPath($doc);
$query = 'string(/Receipt/@CertificateId)';
$id = $xpath->evaluate($query);
$id
は無効となりますこのリンクを放棄したので、ネームスペースにアクセスできません。すなわち、CertificateId
をネームスペースを無視して取得する必要があります(XMLから名前空間文字列を削除すると、コードは機能しますが、XMLを編集したくないです)。私はそれがlocal-name()
XPath関数で行うことができます知っていますが、私はこれをPHPで行うことができますか?
は、ここで私はDOMからそれを読む方法は次のとおりです。
$id = null;
if ($doc->childNodes->length > 0)
{
$root = $doc->childNodes->item(0);
if ($root->nodeName == 'Receipt')
$id = $root->attributes->getNamedItem('CertificateId')->nodeValue;
}
このコードでは、名前空間を無視します。しかし、XPathを使ってこれを行う方法は?
*「私はそれは、XPathの 'ローカル名()'関数によって行うことができます知っているが、私は、PHPでこれをどのように行うことができますか?」*あなたは* * 'ローカル名を使用することはできませんなぜ/どのように() 'PHPで? – har07
これを行う方法がわかりませんでした。トリッキーな構文 – Tertium