2016-08-01 95 views
0

我有我已經下面所附一個巨大的XML結構的xpath和XMLDOM替換XML的一部分,使用的node.js

我添加更新的細節和將數據添加到產品跟蹤模塊,但是當我嘗試改變它就會使用新的XML 示例XML

<query_by_gtin_response:queryByGtinResponse xmlns:query_by_gtin_response="urn:gs1:tsd:query_by_gtin_response:xsd:1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:gs1:tsd:query_by_gtin_response:xsd:1 QueryByGtinResponse.xsd urn:gs1:tsd:basic_product_information_module:xsd:1 BasicProductInformationModule.xsd urn:gs1:tsd:nutritional_product_information_module:xsd:1 NutritionalProductInformationModule.xsd"> 
    <productData> 
    <gtin>00000000000509</gtin> 
    <targetMarket>124</targetMarket> 
    <informationProviderGLN>1111111133333</informationProviderGLN> 
    <informationProviderName>Testsub</informationProviderName> 
    <productDataRecord> 
     <module> 
     <bpi:basicProductInformationModule xmlns:bpi="urn:gs1:tsd:basic_product_information_module:xsd:1"> 
      <productName languageCode="en">waka waka</productName> 
      <brandNameInformation> 
      <brandName>wowozella</brandName> 
      </brandNameInformation> 
     </bpi:basicProductInformationModule> 
     </module> 
     <module> 
     <nfii:nonfoodIngredientInformationModule xmlns:nfii="urn:gs1:tsd:nonfood_ingredient_information_module:xsd:1"/> 
     </module> 
     <module> 
     <product_tracking_information_module> 
      <variantId>ec9ef090-57c2-11e6-bc2b-51c4bf71f613</variantId> 
      <status/> 
      <name>[email protected]</name> 
      <createdBy>552f5b90b348147e03e49b62</createdBy> 
      <createdDate>2016-08-01T08:35:38.648Z</createdDate> 
      <updatedBy>552f5b90b348147e03e49b62</updatedBy> 
      <updatedDate>2016-08-01T08:35:38.648Z</updatedDate> 
      <applicationId>webapp</applicationId> 
      <history> 
      <createdDate>2016-08-01T08:35:38.648Z</createdDate> 
      <updatedDate>2016-08-01T08:35:38.648Z</updatedDate> 
      <status/> 
      <updatedBy>552f5b90b348147e03e49b62</updatedBy> 
      <createdBy>552f5b90b348147e03e49b62</createdBy> 
      <applicationId>webapp</applicationId> 
      <name>[email protected]</name> 
      </history> 
     </product_tracking_information_module> 
     </module> 
    </productDataRecord> 
    </productData> 
</query_by_gtin_response:queryByGtinResponse> 

示例XML我想,以取代在product_tracking_information_module當前完整的數據替換整個XML低於

<product_tracking_information_module> 
    <variantId>ec9ef090-57c2-11e6-bc2b-51c4bf71f613</variantId> 
    <status>deleted</status> 
    <name>gs1canada</name> 
    <createdBy>552f5b90b348147e03e49b62</createdBy> 
    <createdDate>2016-08-01T08:35:38.648Z</createdDate> 
    <updatedBy>company Id 552f5b62b348147e03e49b61</updatedBy> 
    <updatedDate>2016-08-01T14:52:23.985Z</updatedDate> 
    <applicationId>serverlet</applicationId> 
    <history> 
    <createdDate>2016-08-01T08:35:38.648Z</createdDate> 
    <updatedDate>2016-08-01T08:35:38.648Z</updatedDate> 
    <status/> 
    <updatedBy>552f5b90b348147e03e49b62</updatedBy> 
    <createdBy>552f5b90b348147e03e49b62</createdBy> 
    <applicationId>webapp</applicationId> 
    <name>[email protected]</name> 
    </history> 
    <history status="deleted"> 
    <applicationId/> 
    <updatedBy>company Id 552f5b62b348147e03e49b61</updatedBy> 
    <updatedDate>2016-08-01T14:52:23.985Z</updatedDate> 
    <name>gs1canada</name> 
    </history> 
</product_tracking_information_module> 

和代碼來做到這一點,其中doc是xmldom解析文檔 var ptimdom = new dom()。parseFromString(ptimxml.toString()); var nodesPTIM = xpath.select(「// productData // productDataRecord // module // product_tracking_information_module」,doc); doc.replaceChild(ptimdom,nodesPTIM [0]);

但結果是,此後的文檔是僅第二個xml,完整的數據丟失。

我在做什麼錯了?

回答

1

嘗試nodesPTIM[0].parentNode.replaceChild(ptimdom, nodesPTIM[0]),即在要替換的元素的parentNode上調用replaceChild方法。

+0

這就像一個魅力工作!非常感謝 –