Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有名称空间的XML(作为XMLN)。获取特定的子节点_Php_Xml_Xpath_Simplexml - Fatal编程技术网

Php 具有名称空间的XML(作为XMLN)。获取特定的子节点

Php 具有名称空间的XML(作为XMLN)。获取特定的子节点,php,xml,xpath,simplexml,Php,Xml,Xpath,Simplexml,我有一个从法律数据库导出的巨大XML文件。(以下是摘录): 或的内容: 实际上,我可以提取所有包含其他标记的标记,但我无法获取单个打开/关闭标记的内容,例如或或或。我认为这可以奏效,但事实并非如此: $xml->xpath('a:LeggeRegionale[@id="urn:nir:legge:2014-12-12;26"]/a:articolato/a:articolo[@id="art41"]/a:comma[@id="art41-com1"]/a:alinea') 像这样试试 /

我有一个从法律数据库导出的巨大XML文件。(以下是摘录):

的内容:

实际上,我可以提取所有包含其他标记的标记,但我无法获取单个打开/关闭标记的内容,例如
。我认为这可以奏效,但事实并非如此:

$xml->xpath('a:LeggeRegionale[@id="urn:nir:legge:2014-12-12;26"]/a:articolato/a:articolo[@id="art41"]/a:comma[@id="art41-com1"]/a:alinea')
像这样试试

/CodiceRegionale//*[local-name()="el"] or

/CodiceRegionale//*[@id]//*[local-name()="el"] or


/CodiceRegionale//*[@id]//*[local-name()="articolo"]

相应地更改以避免相对路径。

我没有
simplexml
,但是在XPath中使用
DOMDocument
对我来说很有用:

<?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));

我想你可以直接使用//el/num或//alinea,就像那样不。试过了,但不起作用。请注意,我可以有数百个“alinea”,并且我只需要提取特定节点的子节点。像这样尝试/CodiceRegionale/*[local-name()=“el”]这将起作用。我给了一个元素,对所有不理解的元素都是一样的。请您使用我的最后一个PHP字符串编辑您的答案,这样我就可以在不使用
*
的情况下提取特定
articolo->comma
标记的
alinea
标记,比如$xml->xpath('a:LeggeRegionale[@id=“urn:nir:legge:2014-12-12;26”]/a:articoloto/a:articolo[@id=“art41”]/*[local name=“comma][@id=“art41-com1”]/*[local name=“alinea”]”无事可做:返回空数组
array()
。我还尝试将括号()添加到local-name.missed()。请再试一次。$xml->xpath('a:LeggeRegionale[@id=“urn:nir:legge:2014-12-12;26”]/a:articolato[@id=“art41”]/*[local-name()=“逗号”][@id=“art41-com1]/*[local-name()=“alinea”])我注意到缺少的括号。我添加了它们,但没有成功。
$xml->xpath('a:LeggeRegionale[@id="urn:nir:legge:2014-12-12;26"]/a:articolato/a:articolo[@id="art41"]/a:comma[@id="art41-com1"]/a:alinea')
/CodiceRegionale//*[local-name()="el"] or

/CodiceRegionale//*[@id]//*[local-name()="el"] or


/CodiceRegionale//*[@id]//*[local-name()="articolo"]
<?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));