Я хочу идентификатор каждого элемента контекста в следующей строке XML.
<?xml version='1.0' encoding='UTF-8'?>
<xbrli:xbrl xmlns:xbrli="http://www.xbrl.org/2003/instance" id="xbrlID" xmlns:eba_met="http://www.eba.europa.eu/xbrl/crr/dict/met" xmlns:iso4217="http://www.xbrl.org/2003/iso4217" xmlns:xbrldi="http://xbrl.org/2006/xbrldi" xmlns:eba_dim="http://www.eba.europa.eu/xbrl/crr/dict/dim" xmlns:eba_MC="http://www.eba.europa.eu/xbrl/crr/dict/dom/MC" xmlns:eba_PL="http://www.eba.europa.eu/xbrl/crr/dict/dom/PL" xmlns:eba_BA="http://www.eba.europa.eu/xbrl/crr/dict/dom/BA" xmlns:eba_BT="http://www.eba.europa.eu/xbrl/crr/dict/dom/BT" xmlns:eba_CT="http://www.eba.europa.eu/xbrl/crr/dict/dom/CT" xmlns:eba_SC="http://www.eba.europa.eu/xbrl/crr/dict/dom/SC" xmlns:find="http://www.eurofiling.info/xbrl/ext/filing-indicators" xmlns:eba_AS="http://www.eba.europa.eu/xbrl/crr/dict/dom/AS" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:xlink="http://www.w3.org/1999/xlink">
<link:schemaRef xlink:type="simple" xlink:href="http://www.eba.europa.eu/eu/fr/xbrl/crr/fws/finrep/its-2013-03/2014-07-31/mod/finrep_con_ifrs.xsd"/>
<xbrli:context id="context">
<xbrli:entity>
<xbrli:identifier scheme="http://scheme">31489</xbrli:identifier>
</xbrli:entity>
<xbrli:period>
<xbrli:instant>2014-12-31</xbrli:instant>
</xbrli:period>
<xbrli:scenario>
<xbrldi:explicitMember dimension="eba_dim:APL">eba_PL:x26</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="eba_dim:BAS">eba_BA:x7</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="eba_dim:MCY">eba_MC:x111</xbrldi:explicitMember>
</xbrli:scenario>
</xbrli:context>
<xbrli:context id="context_2">
<xbrli:entity>
<xbrli:identifier scheme="http://scheme">31489</xbrli:identifier>
</xbrli:entity>
<xbrli:period>
<xbrli:instant>2014-12-31</xbrli:instant>
</xbrli:period>
<xbrli:scenario>
<xbrldi:explicitMember dimension="eba_dim:APL">eba_PL:x26</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="eba_dim:BAS">eba_BA:x7</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="eba_dim:MCY">eba_MC:x99</xbrldi:explicitMember>
</xbrli:scenario>
</xbrli:context>
</xbrli:xbrl>
Я могу проанализировать XML с помощью следующих строк кода;
$xmldoc = new DOMDocument();
$xmldoc->load($xml);
$xpath = new DOMXPath($xmldoc);
$xpath->registerNamespace("xbrli", "http://www.xbrl.org/2003/instance");
$nodelist = $xpath->query("/xbrli:xbrl/xbrli:context");
Однако, когда я создаю список узлов и печатаю каждый узел, идентификатор не отображается. Есть ли способ получить идентификатор каждого блока контекста из XML? например контекст, conext_2 и т. д.
Ты можешь использовать /@attribute_name
выбрать атрибут узла в xpath:
$idlist = $xpath->query("/xbrli:xbrl/xbrli:context/@id");
Или используя getAttribute("attribute_name")
пока зацикливание списка <context>
узел:
foreach ($nodelist as $node){
//do something useful with $id
$id = $node->getAttribute('id');
}
Вы могли бы просто использовать ->getAttribute()
так как вы уже правильно получили узлы, просто итерируйте и укажите его узлу и используйте метод:
foreach($nodelist as $node) {
echo $node->getAttribute('id');
}
->evaluate
будет работать так же:
foreach($nodelist as $node) {
echo $xpath->evaluate('string(./@id)', $node);
}