diff options
Diffstat (limited to 'xfa/fxfa')
-rw-r--r-- | xfa/fxfa/parser/cxfa_node.cpp | 35 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_node.h | 2 |
2 files changed, 37 insertions, 0 deletions
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp index b2535aee8c..3823d2eae0 100644 --- a/xfa/fxfa/parser/cxfa_node.cpp +++ b/xfa/fxfa/parser/cxfa_node.cpp @@ -4656,3 +4656,38 @@ bool CXFA_Node::PresenceRequiresSpace() const { return ePresence == XFA_AttributeEnum::Visible || ePresence == XFA_AttributeEnum::Invisible; } + +void CXFA_Node::SetToXML(const WideString& value) { + auto* elem = static_cast<CFX_XMLElement*>(GetXMLMappingNode()); + FX_XMLNODETYPE eXMLType = elem->GetType(); + switch (eXMLType) { + case FX_XMLNODE_Element: { + if (IsAttributeInXML()) { + elem->SetString(JSObject()->GetCData(XFA_Attribute::QualifiedName), + value); + return; + } + + bool bDeleteChildren = true; + if (GetPacketType() == XFA_PacketType::Datasets) { + for (CXFA_Node* pChildDataNode = GetFirstChild(); pChildDataNode; + pChildDataNode = pChildDataNode->GetNextSibling()) { + if (!pChildDataNode->GetBindItems()->empty()) { + bDeleteChildren = false; + break; + } + } + } + if (bDeleteChildren) + elem->DeleteChildren(); + + elem->SetTextData(value); + break; + } + case FX_XMLNODE_Text: + static_cast<CFX_XMLText*>(GetXMLMappingNode())->SetText(value); + break; + default: + NOTREACHED(); + } +} diff --git a/xfa/fxfa/parser/cxfa_node.h b/xfa/fxfa/parser/cxfa_node.h index 697320dcbb..cca03ee401 100644 --- a/xfa/fxfa/parser/cxfa_node.h +++ b/xfa/fxfa/parser/cxfa_node.h @@ -169,6 +169,8 @@ class CXFA_Node : public CXFA_Object { CFX_XMLNode* CreateXMLMappingNode(); bool IsNeedSavingXMLNode(); + void SetToXML(const WideString& value); + uint32_t GetNameHash() const { return m_dwNameHash; } bool IsUnnamed() const { return m_dwNameHash == 0; } CXFA_Node* GetModelNode(); |