Как добавить схему в _1 _?
Например, я хочу сгенерировать XML:
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="Frob" Target="Grob"/>
</Relationships>
Я могу создать объект DOMDocument60 (псевдокод):
DOMDocument60 doc = new DOMDocument60();
IXMLDOMElement relationships = doc.appendChild(doc.createElement("Relationships"));
IXMLDOMElement relationship = relationships.appendChild(doc.createElement("Relationship"));
relationship.setAttribute("Id", "rId1");
relationship.setAttribute("Type", "Frob");
relationship.setAttribute("Target", "Grob");
Теперь возникает вопрос, как добавить пространство имен.
Как добавить пространство имен?
Если я выберу очевидное решение, установив атрибут узла Взаимосвязи с именем xmlns
:
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
через что-то вроде:
relationships.setAttribute("xmlns",
"http://schemas.openxmlformats.org/package/2006/relationships");
Когда документ сохраняется, это приводит к тому, что полученный xml неверен:
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="Frob" Target="Grob" xmlns=""/>
</Relationships>
Он помещает пустые xmlns
атрибуты на каждый второй элемент. В этом небольшом тестовом документе xmlns
неправильно применяется только к одному элементу. В реальном мире есть десятки или несколько миллионов других элементов с пустым атрибутом xmlns
.
namespaceURI свойство
Я попытался установить свойство namespaceURI
для Relationships
элемент:
relationshps.namespaceURI := "http://schemas.openxmlformats.org/package/2006/relationships";
но свойство доступно только для чтения.
схемы Свойство
У документа есть свойство schemas
, который получает или устанавливает объект XMLSchemaCache
. Но для этого требуется фактический документ схемы. Например. попытка просто установить схему не работает:
schemas = new XMLSchemaCache60();
schemas.add('', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main');
doc.schemas := schemas;
Но это пытается фактически загрузить URL-адрес схемы, а не не загружать схему, потому что это не URI.
Возможно, мне придется случайным образом попробовать другие вещи:
schemas = new XMLSchemaCache60();
schemas.add('http://schemas.openxmlformats.org/spreadsheetml/2006/main', null);
doc.schemas := schemas;
Но это не вызывает излучения xmlns
.
Итак, теперь я сдаюсь и спрашиваю Stackoverflow.
Вместо того, чтобы пытаться правильно построить XML-документ, я всегда мог бы использовать StringBuilder
для создания XML вручную, а затем преобразовать его в объект XML-документа.
Но я бы предпочел сделать это правильно.