Нежелательный встроенный формат пространства имен, созданный на XML - PullRequest
0 голосов
/ 09 января 2012

Следующий код LINQ to XML C # создает один XElement с одним XAttribute:

XElement xWorksheet = 
    new XElement("Worksheet", new XAttribute(XName.Get("Name", "ss"), "Sheet1"));

. Он генерирует внутреннее пространство имен, в котором создается следующий элемент XML, имеющий p1:

<Worksheet p1:Name="Sheet1" xmlns:p1="ss" />

Однако, что я действительно хочу, это:

<Worksheet ss:Name="Sheet1" />

Как я могу получить вторую форму элемента?

Примечание: Если вы узнаетеXML-структуру, я заполняю электронную таблицу Excel, но это анекдотично для вопроса.

В конечном итоге я создаю элемент Worksheet в следующем документе Excel:

<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">

  <Worksheet ss:Name="Sheet1">
    <Table>
      <Row>
        <Cell>
          <Data ss:Type="String">number </Data>
        </Cell>
        <Cell>
          <Data ss:Type="String">name </Data>
        </Cell>
      </Row>
    </Table>
  </Worksheet>

</Workbook>

1 Ответ

1 голос
/ 10 января 2012

Я должен был определить свое пространство имен XML ss как XNamespace экземпляр, т. Е .:

XNamespace ss = XNamespace.Get("urn:schemas-microsoft-com:office:spreadsheet");
// Note: The string value doesn't seem to matter in my case.

и затем объединить экземпляр пространства имен с именем атрибута следующим образом:

// Broken out into two steps for clarity. 
XAttribute a = new XAttribute(ss + "Name", "Sheet1");
// Put attribute on element:
xWorksheet = new XElement("Worksheet", a);

Создает желаемое сс: Имя Атрибут XML:

<Worksheet ss:Name="Sheet1" 
...