我试图添加生成这样的输出:
<mets ....
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.loc.gov/METS/
http://www.loc.gov/standards/mets/mets.xsd">
我可以生成一切正常,但不能添加xmlns:xlink属性.我得到的最接近的是:
$this->xml = new SimpleXMLElement('<mets></mets>');
$mets->addAttribute("xlink:someName", "blabla", "http://www.w3.org/1999/xlink");
$mets->addAttribute("xsi:schemaLocation", "http://www.loc.gov/METS/
http://www.loc.gov/standards/mets/mets.xsd",
"http://www.w3.org/2001/XMLSchema-instance");
产生:
<mets ....
xmlns:xlink="http://www.w3.org/1999/xlink"
----begin of part I don't desire-----
xlink:someName="blablabla"
----end of part I don't desire-----
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.loc.gov/METS/
http://www.loc.gov/standards/mets/mets.xsd">
如何不添加xlink:somethingElse来添加xmlns:xlink?
解决方法:
我想出的解决方案相当简单:
因为
$mets->addAttribute("xlink:someName", "", "http://www.w3.org/1999/xlink");
将始终添加两个属性-一个用于名称空间声明(xmlns:xlink),然后是您实际添加的属性(xlink:someName)-然后您要做的就是删除不需要的添加属性,并且前缀名称空间属性将保留:
unset($mets->attributes('xlink', true)['someName']);
完整示例:
$mets = new SimpleXMLElement('<mets></mets>');
$mets->addAttribute("xlink:someName", "", "http://www.w3.org/1999/xlink");
unset($mets->attributes('xlink', true)['someName']);
echo $mets->asXML();
输出:
<?xml version="1.0"?>
<mets xmlns:xlink="http://www.w3.org/1999/xlink"/>
但是,通常这不是必需的.您要么需要使用命名空间(某些情况下),然后simplexml将在需要时添加它,或者您不需要它,那么就不需要添加它.
XML本身完全不需要声明未使用的名称空间.因此,您可能也可以忽略它,或者只需要在需要添加的地方添加它,例如稍后将使用特定的xlink元素/属性.
任何支持名称空间的XML解析器都将支持任何格式正确的XML Namspaces文档,因此,实际上没有理由担心根元素是否具有该声明以及使用哪个前缀. Simplexml可以解决此问题,只需在需要的地方添加xlink属性即可.例:
$mets = new SimpleXMLElement('<mets></mets>');
$child = $mets->addChild('child');
$child->addAttribute('xlink:href', 'child.xml', 'http://www.w3.org/1999/xlink');
$child = $child->addChild('child');
$child->addAttribute('xlink:href', 'child.xml', 'http://www.w3.org/1999/xlink');
echo $mets->asXML();
输出:
<?xml version="1.0"?>
<mets>
<child xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="child.xml">
<child xlink:href="child.xml"/>
</child>
</mets>
标签:simplexml,xml,php
来源: https://codeday.me/bug/20191031/1973983.html
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。