首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用xpath从xml中找到基于属性值的元素值?

如何使用xpath从xml中找到基于属性值的元素值?
EN

Stack Overflow用户
提问于 2018-07-04 17:58:09
回答 2查看 66关注 0票数 0

这是文件(1.xml)

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<traceCollecFile xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.423#traceData" >
<fileHeader fileFormatVersion="32.423 V10.0" vendorName="CDOT GROUP" >
<fileSender elementDn="DC=a1.companycdot.com,SubNetwork=1, ManagedElement=MME-1_1_1" elementType="MME" />
</fileHeader>
<traceRecSession dnPrefix="DC=a1.companycdot.com,SubNetwork=1" traceRecSessionRef="992" stime="2018-06-08T13:47:12-05:30" >
<ue idType="IMSI" idValue="311480000002255" />
<msg function="S6" name="UPDATE LOCATION ANSWER" changeTime="0.000000" vendorSpecific="false" >
<ie name="RESULT_CODE">2001</ie>
</msg>
<traceSessionRef >
<MCC>311</MCC>
<MNC>480</MNC>
<TRACE_ID>8323073</TRACE_ID>
</traceSessionRef>
</traceRecSession>
<traceRecSession dnPrefix="DC=a1.companycdot.com,SubNetwork=1" traceRecSessionRef="992" stime="2018-06-08T13:47:12-05:30" >
<ue idType="IMSI" idValue="311480000002255" />
<msg function="S11" name="CREATE SESSION REQUEST" changeTime="0.000000" vendorSpecific="false" >
<ie name="GTP_V2_IE_IMSI">311480000002255</ie>
<ie name="GTP_V2_IE_RAT_TYPE">6</ie>
<ie name="GTP_V2_IE_MSISDN">913114802255</ie>
<ieGroup name="GTP_V2_IE_FQ_CSID" >
<ie name="INSTANCE">0</ie>
<ie name="GTP_V2_IE_FQ_CSID">1</ie>
</ieGroup>
<ieGroup name="GTP_V2_IE_BEARER_CNTXT" >
<ie name="INSTANCE">0</ie>
<ie name="GTP_V2_IE_EBI">5</ie>
<ieGroup name="GTP_V2_IE_BEARER_QOS" >
<ie name="ARP">92</ie>
<ie name="QCI">9</ie>
<ie name="UPLINK_MBR">0</ie>
<ie name="DOWNLINK_MBR">0</ie>
<ie name="UPLINK_GBR">0</ie>
<ie name="DOWNLINK_GBR">0</ie>
</ieGroup>
</ieGroup>
<ie name="GTP_V2_IE_APN">vzwinternet.mnc480.mcc311.gprs</ie>
</msg>
<traceSessionRef >
<MCC>311</MCC>
<MNC>480</MNC>
<TRACE_ID>8323073</TRACE_ID>
</traceSessionRef>
</traceRecSession>
</traceCollecFile>

我只需要属性值为GTP_V2_IE_MSISDN的元素。我尝试过使用xpath在php中编写代码。

代码语言:javascript
复制
<?php
$doc = new DOMDocument();
$doc->load('1.xml');
$xpath = new DOMXPath($doc);
// If you want to read exact attribute
//Selects all the ie elements that have a "name" attribute with a value of "GTP_V2_IE_MSISDN".
 $MSISDN = $xpath->query("//traceCollecFile/traceRecSession/msg/ie[@name='GTP_V2_IE_MSISDN']");
 if ($MSISDN->length > 0) {
    echo $MSISDN->item(0)->value;
 }

但是当我在browser.On控制台中运行时,输出中什么也没有显示,代码中什么也没有显示,正文是空的。请帮帮忙,出什么事了?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2018-07-04 18:00:31

你需要检查你的xpath表达式,如果GTP_V2_IE_MSISDN是唯一的,你可以使用//ie[@name='GTP_V2_IE_MSISDN']代替无效路径。

代码语言:javascript
复制
$MSISDN = $xpath->query("//ie[@name='GTP_V2_IE_MSISDN']");
票数 0
EN

Stack Overflow用户

发布于 2018-07-05 23:08:06

您有一个默认的名称空间。

代码语言:javascript
复制
xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.423#traceData" 

在php中定义它或尝试下面的表达式

代码语言:javascript
复制
//@*[. = "GTP_V2_IE_MSISDN"]/..
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51170901

复制
相关文章

相似问题

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