我正在尝试获取值或所有 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
【问题讨论】:
我的不同,因为节点包含列var_dump($domContent->children('s', true)->Body->children()->StatusResponse->Result->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: 属性 [重复]的主要内容,如果未能解决你的问题,请参考以下文章