gpt4 book ai didi

php - DOMXPath - 获取节点

转载 作者:行者123 更新时间:2023-12-03 17:25:33 24 4
gpt4 key购买 nike

我面临一个我无法解决的问题。我正在使用 DOMXPath检索 MsgId 的值以下 XML 文件的标记:

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>Test/20171013/CCT100621</MsgId>
<CreDtTm>2017-10-13T10:06:21</CreDtTm>
<NbOfTxs>62</NbOfTxs>
</GrpHdr>
</CstmrCdtTrfInitn>
</Document>

以下是我使用 DOMXPath 查询 XML 的 PHP 代码片段:
$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>Test/20171013/CCT100621</MsgId>
<CreDtTm>2017-10-13T10:06:21</CreDtTm>
<NbOfTxs>62</NbOfTxs>
</GrpHdr>
</CstmrCdtTrfInitn>
</Document>
XML;

$document = new DOMDocument;
$document->loadXML($xml);
$groupHeaderXPath = new DOMXPath($document);
echo $groupHeaderXPath->query('//GrpHdr/MsgId')->length; // returns 0

我正在用这个 tool 测试查询它似乎是正确的。

有谁知道,为什么 xpath 表达式在这种情况下不起作用?我在这里遗漏了一些细节吗?

最佳答案

$groupHeaderXPathDOMXPath 类型, 它有一个方法 registerNamespace .

我认为注册命名空间并在 xpath 表达式中使用前缀“urn”会有所帮助。

例如:

$rootNamespace = $document->lookupNamespaceUri($document->namespaceURI);
$groupHeaderXPath->registerNamespace("urn", $rootNamespace);
echo $groupHeaderXPath->query('//urn:GrpHdr/urn:MsgId')->length; // returns 1

关于php - DOMXPath - 获取节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46788241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com