我从法律数据库中导出了大量的XML文件。 (以下是摘录):
<CodiceRegionale>
<LeggeRegionale id="urn:nir:legge:2014-12-12;26" xmlns="http://www.normeinrete.it/nir/2.1/">
<intestazione>Legge regionale 12 dicembre 2014, n. 26 ... </intestazione>
<articolato>
<articolo id="art41" xmlns="http://www.normeinrete.it/nir/2.1/">
<num>Art. 41</num>
<rubrica>(Riforma della finanza locale)</rubrica>
<comma id="art41-com1">
<num>1. </num>
<alinea>Al fine di supportare ...</alinea>
<el id="art41-com1-let_a">
<num>a) </num>
<corpo>definizione di un nuovo ...</corpo>
</el>
<el id="art41-com1-let_b">
<num>b) </num>
<corpo>coordinamento ... </corpo>
</el>
</comma>
</articolo>
</articolato>
</LeggeRegionale>
</CodiceRegionale>
由于XML使用名称空间,我可以按如下方式提取内容。例如,我可以像这样得到<articolo id=>
的内容:
$xml->xpath('a:LeggeRegionale[@id="urn:nir:legge:2014-12-12;26"]/a:articolato/a:articolo[@id="art41"]');
或<comma id=>
的内容:
$xml->xpath('a:LeggeRegionale[@id="urn:nir:legge:2014-12-12;26"]/a:articolato/a:articolo[@id="art41"]/a:comma[@id="art41-com1"]');
实际上,我可以提取包含其他标记的所有标记,但我无法获取单个打开/关闭标记的内容,例如<num>
或<rubrica>
或{{1 }或<alinea>
。我认为这可行,但事实并非如此:
<corpo>
答案 0 :(得分:0)
试试这个
/CodiceRegionale//*[local-name()="el"] or
/CodiceRegionale//*[@id]//*[local-name()="el"] or
/CodiceRegionale//*[@id]//*[local-name()="articolo"]
相应地改变相对路径。
答案 1 :(得分:0)
我没有simplexml
但是使用DOMDocument
和XPath一起工作:
<?php
$xmlString = '...';
$document = new DOMDocument();
$document->loadXML($xmlString);
$xpath = new DOMXPath($document);
$xpath->registerNamespace('a', 'http://www.normeinrete.it/nir/2.1/');
$nodes = $xpath->query('a:LeggeRegionale[@id="urn:nir:legge:2014-12-12;26"]/a:articolato/a:articolo[@id="art41"]/a:comma[@id="art41-com1"]/a:alinea');
print_r($nodes->item(0));