【问题标题】:Reading XML file with namespaces使用命名空间读取 XML 文件
【发布时间】:2016-06-24 21:31:38
【问题描述】:

我需要一些帮助来阅读具有名称空间的 XML。 我可以读取没有任何命名空间但不能使用命名空间的文件..

XML 示例:

<?xml version="1.0" encoding="utf-8"?>
<OrderResponse xmlns:cac="urn:basic:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:xsi="http://www.w3.org/" xmlns:cbc="urn:basic:names:specification:ubl:schema:xsd:BasicComponents-2" xmlns="urn:basic:names:specification:ubl:schema:xsd:OrderResponse-2">
  <cbc:UBLVersionID>2.1</cbc:UBLVersionID>
  <cbc:AccountingCostCode>TESTER TEST</cbc:AccountingCostCode>
  <cac:OrderReference>
    <cbc:ID>100067010</cbc:ID>
    <cbc:IssueDate>2016-06-15</cbc:IssueDate>
    <cbc:OrderTypeCode>EDI</cbc:OrderTypeCode>
  </cac:OrderReference>
</OrderResponse>

我需要获取 .. 我试着用 DomDocument 来做。 这是我的代码:

function SearchXMLID($xml){
var_dump($xml);
$doc = new DOMDocument();
$doc->load($xml);
$id = $doc->getElementsByTagNameNS('urn:basic:names:specification:ubl:schema:xsd:CommonAggregateComponents-2','cbc:ID');

  foreach($id as $i){
    echo "<pre>";var_dump('NS',$i->nodeValue,PHP_EOL);"</pre>";

  }
}

$files = glob('dataXMl/*xml');
echo "<pre>";var_dump($files,PHP_EOL);"</pre>";

foreach($files as $f){
    SearchXMLID($f);
 }

此代码有效,但正在获取所有带有 'cbc:' 的命名空间并将其存储在一个字符串中..

    array(1) {
  [0]=>
  string(17) "dataXMl/test1.xml"
}
string(1) "
"
string(17) "dataXMl/test1.xml"
string(2) "NS"
string(40) "
    100000050
    2016-06-15
    EDI
  "
string(1) "
"

它获取所有带有命名空间“cbc”的标签。但我只想获取标签“cbc:ID”。

我做错了什么?

【问题讨论】:

    标签: php xml domdocument


    【解决方案1】:

    我不是 php 编码方面的专家,但我的直觉告诉我,您的 getElementsByTagNameNS 的两个参数都是错误的。

    试试这个:

    $id = $doc->getElementsByTagNameNS('urn:basic:names:specification:ubl:schema:xsd:BasicComponents-2','ID');
    

    即

  • 使用正确的命名空间-uri:“urn:basic:names:specification:ubl:schema:xsd:BasicComponents-2”
  • 并删除 cbc 前缀
  • 【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多