首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DOMXPath -获取节点

DOMXPath -获取节点
EN

Stack Overflow用户
提问于 2017-10-17 10:43:44
回答 1查看 68关注 0票数 2

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

代码语言:javascript
复制
<?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代码片段:

代码语言:javascript
复制
$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

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

有谁知道,为什么xpath表达式在这个上下文中不起作用?我是不是漏掉了一些细节?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-17 11:09:15

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

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

例如:

代码语言:javascript
复制
$rootNamespace = $document->lookupNamespaceUri($document->namespaceURI);
$groupHeaderXPath->registerNamespace("urn", $rootNamespace);
echo $groupHeaderXPath->query('//urn:GrpHdr/urn:MsgId')->length; // returns 1
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46788241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档