【问题标题】:How to set default namespace for XML in PHP如何在 PHP 中为 XML 设置默认命名空间
【发布时间】:2016-03-13 05:33:17
【问题描述】:

我有一些 XML,需要为其设置命名空间。 我就是这样尝试的:

$classXML = "<CLASSXml><CalculationIndex><RunDesc>NormalCalc</RunDesc></CalculationIndex><GlobalData><CalcIdent><CalcUId>CLASS:20151203:19335012:000000000000:203:CS:CZK:349074</CalcUId><CalcNo>2454307111</CalcNo><CustomNo>349074</CustomNo><CalcVer>2300</CalcVer><XMLVer>23.00.01</XMLVer><ClassBuild>23.00.04.03</ClassBuild><SAXIFVersion>6.2</SAXIFVersion><SystemDat>2015-12-03</SystemDat><TimeStamp>19:33:50.12</TimeStamp><ProdMasterVer>0</ProdMasterVer></CalcIdent><CalcParam><CalcDat>2015-12-03</CalcDat><PPPriceDat>2015-11-01</PPPriceDat><NumbersOfLbrRt Val=\"1\"/><CountryCdISO>203</CountryCdISO><LngCdISO>CS</LngCdISO><ManufacturerTimeBase>5</ManufacturerTimeBase><TimeBase Unit=\"WU/h\" Val=\"10\"/><TimeBaseDtl><DecNo Val=\"1\"/></TimeBaseDtl><UcsWoMat>true</UcsWoMat><AZTCalcPrepCd>0</AZTCalcPrepCd><SGNFlag>1</SGNFlag><PPPriceDatMaster>2015-11-01</PPPriceDatMaster><MaintCd>M</MaintCd><CurDtl><ISO>CZK</ISO><DecNo Val=\"2\"/><Desc>CZK</Desc></CurDtl><RecordId>7</RecordId></CalcParam><Vehicle><VehicleIdentification><VIN>12365478965412365</VIN><ManufacturerCodeAX>07</ManufacturerCodeAX><ManufacturerName>ALFA ROMEO</ManufacturerName><ModelCodeAX>25</ModelCodeAX><ModelName>SPIDER</ModelName><SubModelCodeAX>52</SubModelCodeAX><SubModelName>EXCLUSIVE</SubModelName><ModelCdAXIntern>07</ModelCdAXIntern></VehicleIdentification><VehicleModelOptions><Known><ModelOptionDetail><MO>W3</MO><MODesc>3-DVEŘOVÉ (COUPE)</MODesc><MOSrcCd>1</MOSrcCd><MOPrtCd>0</MOPrtCd><MOFncCd>Z0</MOFncCd><MOGrpCd>100</MOGrpCd></ModelOptionDetail></Known></VehicleModelOptions></Vehicle></GlobalData><CalcData><RunDesc>NormalCalc</RunDesc><FinalCalc><GrandTotal><RepTaxDtl></RepTaxDtl><TotTaxDtl></TotTaxDtl><TaxPC Unit=\"%\" Val=\"+21.0\"/></GrandTotal><FCRepTot><RepTotTaxDtl></RepTotTaxDtl></FCRepTot><FCPart><FCSundry></FCSundry></FCPart><FCLabor></FCLabor><FCAdditionalCost></FCAdditionalCost><FCPaint></FCPaint></FinalCalc><SpareParts></SpareParts><Labor></Labor><ExplanatoryTexts><ExplTxt><Desc>CENY ND = NCDV</Desc><Desc>* = ÚDAJE UŽIVATELE</Desc></ExplTxt><ExplTxt><Desc>NN = NEEXISTUJE Č ND / Č PRAC-POZ</Desc><Desc>Č. ND NEMUSÍ BÝT OBJEDNACÍM Č</Desc></ExplTxt><ExplTxt><Desc>)=ČAS-JEDNOTKY V JINÉ POZICI OBSAŽENY</Desc><Desc>ZAX = ČAS-NORMU ZAJISTIL AUDATEX</Desc></ExplTxt></ExplanatoryTexts><CalcControl></CalcControl></CalcData></CLASSXml>";
$classXML=simplexml_load_string($classXML);
$classXML->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xmlns:g', 'http://base.google.com/ns/1.0');
print_r($classXML);

但是我遇到了错误

SimpleXMLElement::setAttributeNS()

之后我尝试通过 DOM 加载 XML,例如:

$doc = new DOMDocument();
$doc->loadXML($classXML);
$classXML->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xmlns:g', 'http://base.google.com/ns/1.0');

结果相同。 伙计们,我如何在 PHP 中为我加载的 XML 设置一个命名空间?

结果应该是这样的:

<g:CLASSXml><g:CalculationIndex><g:RunDesc>NormalCalc</g:RunDesc></g:CalculationIndex><g:GlobalData><g:CalcIdent>...and so on

感谢您的建议 安杜里特

【问题讨论】:

    标签: php xml


    【解决方案1】:
    $doc = new DOMDocument();
    $doc->loadXML($classXML);
    $rootNode = $doc->documentElement; // getting root node
    $rootNode->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xmlns:g', 'http://base.google.com/ns/1.0');
    

    【讨论】:

    • 您好@RomanPerekhrest 比 kyou 的回答,不幸的是错误仍然是:调用未定义的方法 DOMElement::addAttribute() in
    • 我已经编辑了我的帖子。但我怀疑您能否为现有的 xml 字符串应用这样的命名空间。应该使用新的命名空间重新加载 DOM 树。最可取的方式 - 在创建 xml 文档时设置命名空间
    猜你喜欢
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多