我正在尝试获取值或所有 a: 属性 [重复]

Posted

技术标签:

【中文标题】我正在尝试获取值或所有 a: 属性 [重复]【英文标题】:I am trying to get the values or all the a: attributes [duplicate] 【发布时间】:2019-05-12 12:29:30 【问题描述】:

我使用过 php SimpleXML、simplexml_load_string,即使使用 DOM 和 SimpleXML 后我也没有收到任何响应

//PHP XML 响应

$xml = <<<XML
    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
    <StatusResponse xmlns="http://tempuri.org/">
    <Result xmlns:a="http://schemas.datacontract.org/2004/07/OS.FLC" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <a:ResCode>OK</a:ResCode>
    <a:IDNumber>149897</a:IDNumber>
    <a:CusName>AXios ASOS</a:CusName>
    <a:HoldName>AXA AXIOS</a:HoldName>
    </Result>
    </StatusResponse>
    </s:Body>
    </s:Envelope>
    XML;

// 使用 PHP SIMPLE XML

$domContent = new SimpleXMLElement(((string)$xml), LIBXML_COMPACT);
$test = $domContent->xpath('/Result/a/*');
foreach ($test as $node) 

     print_r($node);

//使用DOM

$domp = new DOMDocument('1.0', 'utf-8');
$domp->loadXML($xml);
$items = $domp->getElementsByTagName('a');
foreach ($items as $item) 

     $HOLDER = $item->getElementsByTagNameNS("http://schemas.datacontract.org/2004/07/OS.FLC", "*")->Result(0)->nodeValue;
     echo "HoldName = " . $HOLDER . PHP_EOL;



// Expected Result

ResCode = OK
IDNumber = 149897
CusName = AXIOS ASOS

【问题讨论】:

我的不同,因为节点包含列 OK149897AXIOS ASOS:CusName> AXA AXIOS 我怎样才能得到这个值 不同?真的吗 ?我只看到比上面重复的问题更多的名称空间。基本相同 => var_dump($domContent-&gt;children('s', true)-&gt;Body-&gt;children()-&gt;StatusResponse-&gt;Result-&gt;children('a', true))。我们可以同意这是丑陋的。但是如果你想使用 XPath 和 simplexml,你必须register every namespace your are using 【参考方案1】:

使用DOMDocument,你可以使用getElementsByTagNameNS,并指定a的整个URL:

$doc = new DOMDocument('1.0', 'utf-8');
$doc->loadXML($xml);

$elements = $doc->getElementsByTagNameNS('http://schemas.datacontract.org/2004/07/OS.FLC', '*');
foreach($elements as $elem)

    echo $elem->nodeName . ' -> ' . $elem->nodeValue ;

输出:

a:ResCode -> OK
a:IDNumber -> 149897
a:CusName -> AXIOS ASOS
a:HoldName -> AXA AXIOS

【讨论】:

谢谢这个工作,但是我如何定位一个特定的节点让我们说例如 $elem->CusName。或者我只想获取 a:IDNumber 的值我该怎么做 - 新手在这里 您可以根据您要定位的元素(例如CusName)替换函数第二个参数中的*(意思是“全部”)

以上是关于我正在尝试获取值或所有 a: 属性 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在所有表中搜索具有给定值或名称的字段[重复]

如何在Javascript中准备好值或条件之前阻止应用程序继续运行[重复]

如何创建谓词以获取同一属性的所有不重复结果的实体?

Mysqli只获取一行/属性[重复]

PyMongo - 将属性中的所有值设置为小写[重复]

获取对象的所有属性[重复]