заменить часть xml, используя xpath и xmldom в node.js

У меня есть огромная структура xml, которую я прикрепил ниже,

Я добавляю сведения об обновлении и добавляю данные в модуль отслеживания продуктов, но когда я пытаюсь изменить его, он заменяет весь xml новым образцом 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 ниже

<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, и полные данные теряются.

Что я делаю не так?


person Abhishek Nair    schedule 01.08.2016    source источник


Ответы (1)


Попробуйте nodesPTIM[0].parentNode.replaceChild(ptimdom, nodesPTIM[0]), то есть вызовите метод replaceChild для родительского узла элемента, который вы хотите заменить.

person Martin Honnen    schedule 03.08.2016