我收到xml,如:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="http://adress.pl/FeResourceServlet/localTemplate/template1/styl.xsl"?>
<wnio:Dokument
xmlns:adr="http://adress.pl/xml/schema/adress/2009/11/09/"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:inst="http://adress.pl/xml/schematy/instytucja/2009/11/16/"
xmlns:meta="http://adress.pl/xml/schematy/meta/2009/11/16/"
xmlns:oso="http://adress.pl/xml/schematy/osoba/2009/11/16/"
xmlns:str="http://adress.pl/xml/schematy/struktura/2009/11/16/" xmlns:wnio="http://epuap.gov.pl/FeResourceServlet/localTemplate/ZgloszenieBudowy/"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
xsi:schemaLocation="http://adress.pl/FeResourceServlet/localTemplate/template1/ http://epuap.gov.pl/FeResourceServlet/localTemplate/template1/schema.xsd">
...
我的问题是 - 如何获得root的命名空间? 我的根节点上方是wnio:Dokument,我知道wnio是&#34; root的名称空间&#34;根的名字是Dokument。
但可以更改名称和命名空间。然后我会有根节点,但我不知道名称空间和root名称。
到目前为止我使用过:SimpleXMLElement :: getNamespaces和SimpleXMLElement :: getDocNamespaces。但我收到了每个命名空间,但我不知道哪个是根。
PHP可以获取这些信息吗?
答案 0 :(得分:2)
DOM节点具有返回节点名称空间的属性$namespaceURI
:
$document = new DOMDocument();
$document->loadXml(
'<wnio:Dokument xmlns:wnio="http://epuap.gov.pl/FeResourceServlet/localTemplate/ZgloszenieBudowy/"/>'
);
var_dump($document->documentElement->namespaceURI);
但名称空间是XML文档中最稳定的部分。命名空间指定信息的格式。如果命名空间更改了格式更改,则必须更改应用程序的逻辑。
您的应用程序需要知道它读取的格式并希望获得它。这就是命名空间。
另一方面,名称空间前缀可以在任何元素节点上更改。您应该期望一个特定的前缀,但您可以并且必须期望一个特定的命名空间。
以下是一个例子:
$document = new DOMDocument();
$document->loadXml(
'<wnio:Dokument xmlns:wnio="http://epuap.gov.pl/FeResourceServlet/localTemplate/ZgloszenieBudowy/"/>'
);
$xpath = new DOMXpath($document);
$xpath->registerNamespace('w', 'http://epuap.gov.pl/FeResourceServlet/localTemplate/ZgloszenieBudowy/');
foreach ($xpath->evaluate('/w:Dokument') as $node) {
var_dump($node->nodeName);
}
输出:
string(13) "wnio:Dokument"
答案 1 :(得分:1)
您可以使用DomDocument
$dom = new DOMDocument();
$response = $dom->loadXML($xml);//$xml is your xml string or file
$root = $dom->documentElement;//will return the document root element
$rootPrefix = $root->prefix;//getting the prefix of your element
$namespace = $root->lookupNamespaceURI($rootPrefix);//getting the namespace of the root element
[documentElement][2]
属性是将根元素作为DOMElement的简单方法。