summaryrefslogtreecommitdiff
path: root/xfa
diff options
context:
space:
mode:
Diffstat (limited to 'xfa')
-rw-r--r--xfa/fxfa/parser/cxfa_node.cpp35
-rw-r--r--xfa/fxfa/parser/cxfa_node.h2
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();