diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp
index 9e8188d..a762027 100644
--- a/fxjs/xfa/cjx_object.cpp
+++ b/fxjs/xfa/cjx_object.cpp
@@ -345,7 +345,8 @@
   CFX_XMLElement* elem = SetValue(eAttr, XFA_AttributeType::Boolean,
                                   (void*)(uintptr_t)bValue, bNotify);
   if (elem)
-    elem->SetAttribute(XFA_AttributeToName(eAttr), bValue ? L"1" : L"0");
+    elem->SetAttribute(WideString::FromASCII(XFA_AttributeToName(eAttr)),
+                       bValue ? L"1" : L"0");
 }
 
 bool CJX_Object::GetBoolean(XFA_Attribute eAttr) {
@@ -356,7 +357,7 @@
   CFX_XMLElement* elem = SetValue(eAttr, XFA_AttributeType::Integer,
                                   (void*)(uintptr_t)iValue, bNotify);
   if (elem) {
-    elem->SetAttribute(XFA_AttributeToName(eAttr),
+    elem->SetAttribute(WideString::FromASCII(XFA_AttributeToName(eAttr)),
                        WideString::Format(L"%d", iValue));
   }
 }
@@ -397,7 +398,7 @@
   CFX_XMLElement* elem = SetValue(eAttr, XFA_AttributeType::Enum,
                                   (void*)(uintptr_t)eValue, bNotify);
   if (elem) {
-    elem->SetAttribute(XFA_AttributeToName(eAttr),
+    elem->SetAttribute(WideString::FromASCII(XFA_AttributeToName(eAttr)),
                        WideString::FromASCII(XFA_AttributeValueToName(eValue)));
   }
 }
@@ -478,7 +479,7 @@
     return;
   }
 
-  WideString wsAttrName = XFA_AttributeToName(eAttr);
+  WideString wsAttrName = WideString::FromASCII(XFA_AttributeToName(eAttr));
   if (eAttr == XFA_Attribute::ContentType)
     wsAttrName = L"xfa:" + wsAttrName;
 
diff --git a/xfa/fxfa/parser/xfa_basic_data.cpp b/xfa/fxfa/parser/xfa_basic_data.cpp
index 395add8..6c53325 100644
--- a/xfa/fxfa/parser/xfa_basic_data.cpp
+++ b/xfa/fxfa/parser/xfa_basic_data.cpp
@@ -211,6 +211,10 @@
 
 }  // namespace
 
+ByteStringView XFA_ElementToName(XFA_Element elem) {
+  return g_ElementTable[static_cast<size_t>(elem)].name;
+}
+
 XFA_Element XFA_GetElementByName(const WideString& name) {
   uint32_t hash = FX_HashCode_GetW(name.AsStringView(), false);
   auto* elem = std::lower_bound(
@@ -221,9 +225,8 @@
   return XFA_Element::Unknown;
 }
 
-WideString XFA_AttributeToName(XFA_Attribute attr) {
-  return WideString::FromASCII(
-      g_AttributeTable[static_cast<size_t>(attr)].name);
+ByteStringView XFA_AttributeToName(XFA_Attribute attr) {
+  return g_AttributeTable[static_cast<size_t>(attr)].name;
 }
 
 Optional<XFA_ATTRIBUTEINFO> XFA_GetAttributeByName(const WideStringView& name) {
diff --git a/xfa/fxfa/parser/xfa_basic_data.h b/xfa/fxfa/parser/xfa_basic_data.h
index 5166ebe..609e8e0 100644
--- a/xfa/fxfa/parser/xfa_basic_data.h
+++ b/xfa/fxfa/parser/xfa_basic_data.h
@@ -14,9 +14,10 @@
 #include "third_party/base/optional.h"
 #include "xfa/fxfa/fxfa_basic.h"
 
+ByteStringView XFA_ElementToName(XFA_Element elem);
 XFA_Element XFA_GetElementByName(const WideString& name);
 
-WideString XFA_AttributeToName(XFA_Attribute attr);
+ByteStringView XFA_AttributeToName(XFA_Attribute attr);
 Optional<XFA_ATTRIBUTEINFO> XFA_GetAttributeByName(const WideStringView& name);
 
 ByteStringView XFA_AttributeValueToName(XFA_AttributeValue item);
diff --git a/xfa/fxfa/parser/xfa_basic_data_unittest.cpp b/xfa/fxfa/parser/xfa_basic_data_unittest.cpp
index 8a9c38b..d0abe64 100644
--- a/xfa/fxfa/parser/xfa_basic_data_unittest.cpp
+++ b/xfa/fxfa/parser/xfa_basic_data_unittest.cpp
@@ -8,18 +8,23 @@
 
 #include "testing/gtest/include/gtest/gtest.h"
 
-namespace {
+TEST(XFABasicDataTest, GetElementByName) {
+  EXPECT_EQ(XFA_Element::Unknown, XFA_GetElementByName(L""));
+  EXPECT_EQ(XFA_Element::Unknown, XFA_GetElementByName(L"nonesuch"));
+  EXPECT_EQ(XFA_Element::ConnectionSet, XFA_GetElementByName(L"connectionSet"));
+  EXPECT_EQ(XFA_Element::Items, XFA_GetElementByName(L"items"));
 
-void DoElementAttrTestCase(XFA_Element elem,
-                           XFA_Attribute attr,
-                           std::pair<XFA_Element, XFA_Attribute>* so_far) {
-  auto curr = std::make_pair(elem, attr);
-  EXPECT_LT(*so_far, curr) << " for " << static_cast<int>(elem) << ", "
-                           << static_cast<int>(attr);
-  *so_far = curr;
+  // Internal elements are not retrievable by name.
+  EXPECT_EQ(XFA_Element::Unknown, XFA_GetElementByName(L"model"));
 }
 
-}  // namespace
+TEST(XFABasicDataTest, ElementToName) {
+  EXPECT_EQ("conformance", XFA_ElementToName(XFA_Element::Conformance));
+  EXPECT_EQ("tagged", XFA_ElementToName(XFA_Element::Tagged));
+
+  // Internal elements resolve to some sort of name.
+  EXPECT_EQ("******", XFA_ElementToName(XFA_Element::Node));
+}
 
 TEST(XFABasicDataTest, GetAttributeByName) {
   Optional<XFA_ATTRIBUTEINFO> result = XFA_GetAttributeByName(L"");
@@ -41,6 +46,11 @@
   EXPECT_EQ(XFA_Attribute::DecipherOnly, result.value().attribute);
 }
 
+TEST(XFABasicDataTest, AttributeToNamee) {
+  EXPECT_EQ("spaceBelow", XFA_AttributeToName(XFA_Attribute::SpaceBelow));
+  EXPECT_EQ("decipherOnly", XFA_AttributeToName(XFA_Attribute::DecipherOnly));
+}
+
 TEST(XFABasicDataTest, GetAttributeValueByName) {
   Optional<XFA_AttributeValue> result = XFA_GetAttributeValueByName(L"");
   EXPECT_FALSE(result.has_value());
@@ -61,11 +71,7 @@
   EXPECT_EQ(XFA_AttributeValue::Lowered, result.value());
 }
 
-TEST(XFABasicDataText, ElementAttributeOrder) {
-  std::pair<XFA_Element, XFA_Attribute> so_far = {};
-#undef ELEM_ATTR____
-#define ELEM_ATTR____(a, b, c) \
-  DoElementAttrTestCase(XFA_Element::a, XFA_Attribute::b, &so_far);
-#include "xfa/fxfa/parser/element_attributes.inc"
-#undef ELEM_ATTR____
+TEST(XFABasicDataTest, AttributeValueToName) {
+  EXPECT_EQ("rl-tb", XFA_AttributeValueToName(XFA_AttributeValue::Rl_tb));
+  EXPECT_EQ("lowered", XFA_AttributeValueToName(XFA_AttributeValue::Lowered));
 }
diff --git a/xfa/fxfa/parser/xfa_utils.cpp b/xfa/fxfa/parser/xfa_utils.cpp
index 6d6f9d3..566556e 100644
--- a/xfa/fxfa/parser/xfa_utils.cpp
+++ b/xfa/fxfa/parser/xfa_utils.cpp
@@ -166,7 +166,8 @@
       continue;
     }
     WideString wsAttr;
-    SaveAttribute(pNode, attr, XFA_AttributeToName(attr), bSaveXML, wsAttr);
+    SaveAttribute(pNode, attr, WideString::FromASCII(XFA_AttributeToName(attr)),
+                  bSaveXML, wsAttr);
     wsAttrs += wsAttr;
   }
 
@@ -345,7 +346,8 @@
       continue;
 
     WideString wsAttr;
-    SaveAttribute(pNode, attr, XFA_AttributeToName(attr), false, wsAttr);
+    SaveAttribute(pNode, attr, WideString::FromASCII(XFA_AttributeToName(attr)),
+                  false, wsAttr);
     wsOutput += wsAttr;
   }
 
