2016-12-28 62 views
2

嗨有人可以帮助我在PHP中修改以下XML文档。在PHP中追加XML节点

的主要原因是这个问题我想和标签名称的虚拟XML节点追加为Service到事件>>车身>>服务>> ServiceInstalls

下面是XML文档

<Event> 
    <Header> 
     <EventSource>TXT</EventSource> 
    </Header> 
    <Body> 
     <Services> 
      <CurrentServices> 
       <Service serviceID = "SS014"> 
        <ServiceChangeActivity>NoChange</ServiceChangeActivity> 
        <TelephoneNumbers> 
         <TN></TN> 
        </TelephoneNumbers> 
        <Rate>0.00</Rate> 
        <Desc>Auto</Desc> 
        <Count>1</Count> 
        <LOB>XHS</LOB> 
        <PackageCode>Test</PackageCode> 
        <EPCServiceDef> 
         <EPCProduct pn = "10300029"> 
          <Name>Auto</Name> 
          <LongDescription>Auto SERVICE</LongDescription> 
          <Type>Service</Type> 
          <LOB>Video</LOB> 
         </EPCProduct> 
        </EPCServiceDef> 
        <Type>S</Type> 
        <TypeClassification>S</TypeClassification> 
        <SubType>04</SubType> 
        <Status>C</Status> 
        <Provisionable>N</Provisionable> 
        <BillCode>Auto</BillCode> 
        <BillCodeDescription>Auto</BillCodeDescription> 
        <Outlet></Outlet> 
        <Port></Port> 
        <BeforeQuantity>1</BeforeQuantity> 
        <Quantity>1</Quantity> 
        <ConnectDate>2016-12-19</ConnectDate> 
        <CompleteIndicator>C</CompleteIndicator> 
       </Service> 
       <Service serviceID = "BA"> 
        <ServiceChangeActivity>NoChange</ServiceChangeActivity> 
        <TelephoneNumbers> 
         <TN></TN> 
        </TelephoneNumbers> 
        <Rate>0.00</Rate> 
        <TXTServiceBilling> 
         <BeginDate>2016-12-19T00:00:00.000Z</BeginDate> 
         <Discount></Discount> 
         <DiscountDescription/> 
         <CustomerDiscount></CustomerDiscount> 
         <CustomerDiscountDescription/> 
         <DiscountGroup/> 
         <DiscountGroupBeginDate/> 
         <Charge>0.00</Charge> 
         <ChargeType>R</ChargeType> 
         <ChargeMethod></ChargeMethod> 
         <Hold/> 
        </TXTServiceBilling> 
        <Desc>Basic</Desc> 
        <Count>1</Count> 
        <LOB>Video</LOB> 
        <PackageCode>BA</PackageCode> 
        <EPCServiceDef> 
         <EPCProduct pn = "Auto"> 
          <Name>Basic Video (B1)</Name> 
          <LongDescription>BASIC VIDEO</LongDescription> 
          <Type>Service</Type> 
          <LOB>Video</LOB> 
         </EPCProduct> 
        </EPCServiceDef> 
        <Type>S</Type> 
        <TypeClassification>S</TypeClassification> 
        <SubType>01</SubType> 
        <Status>C</Status> 
        <Provisionable>N</Provisionable> 
        <BillCode>BA</BillCode> 
        <BillCodeDescription>Basic</BillCodeDescription> 
        <Outlet></Outlet> 
        <Port></Port> 
        <BeforeQuantity>1</BeforeQuantity> 
        <Quantity>1</Quantity> 
        <ConnectDate>2016-12-19</ConnectDate> 
        <CompleteIndicator>C</CompleteIndicator> 
        <TXTServiceIdentifier>3</TXTServiceIdentifier> 
       </Service> 
      </CurrentServices> 
      <ServiceChanges> 
       <ServiceInstalls> 
        <Service serviceID = "SSSS"> 
         <ServiceChangeActivity>Install</ServiceChangeActivity> 
         <Desc>SSSS</Desc> 
         <LOB>Other</LOB> 
         <TXTServiceIdentifier>4</TXTServiceIdentifier> 
        </Service> 
       </ServiceInstalls> 
       <ServiceDisconnects/> 
      </ServiceChanges> 
     </Services> 
    </Body> 
</Event> 

我已经尝试了代码,这样,但是我得到错误

$ str是什么,但上面的XML

$result = simplexml_load_string($str); 
$result = $result->xpath('/Event/Body/Services/ServiceChanges/ServiceInstalls'); 
$result = $result->addChild('Service',''); 

echo $result; 

错误是


致命错误:调用一个成员函数的addChild()上阵列中C:\ XAMPP \ htdocs中\ xhe2e \上线info.php的
第107行是$ result = $ result-> addChild('Service','');

+1

显示你试图得到什么附加的孩子。你有没有读过任何相关的问题/答案,如这一个:http://stackoverflow.com/questions/31144422/append-xml-to-domnode-in-php?rq=1或这一个:http:///stackoverflow.com/questions/40139917/append-child-to-xml-based-on-attribute-of-the-parent-node-in-php?rq=1 –

+0

@cale_b我用我的尝试更新了这个问题,你能帮助我需要做什么来解决问题 – Batman

回答

1

你错过了在尝试一个微妙的项目:

$result = simplexml_load_string($str); 
$result = $result->xpath('/Event/Body/Services/ServiceChanges/ServiceInstalls'); 
// $result should now be an array. Check to be sure: 
if ($result && is_array($result)) { 
    // since it IS an array, set to the first element of the array 
    $result = $result[0]; 
    // And NOW we can append 
    $result = $result->addChild('Service',''); 
} 

// The part from here is only to make the output pretty-xml 
// instead you can just use $result->saveXML() 
$dom = new DOMDocument("1.0"); 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = true; 
$dom->loadXML($result->saveXML()); 
var_dump($dom->saveXML()); 
+0

现在我没有看到任何错误,但没有看到任何回应也。您能否请检查 – Batman

+0

是的,抱歉,无法回应它 - 需要先将它再次保存到XML。 –

+0

我得到的答复作为字符串(33)在响应,而不是'var_dump'我想用'回声'获得响应作为字符串,但它不工作你能帮助这里 – Batman

0
$sxe = new SimpleXMLElement($xmlstr); 
$result = $sxe->xpath('/Event/Body/Services/ServiceChanges/ServiceInstalls'); 
$result = $result[0]; 
$result = $result->addChild('Service','Dummy'); 

echo $sxe->asXML(); 

我能够用这种方式