XML属性上生成的不需要的内联命名空间格式

时间:2012-01-09 19:31:17

标签: linq-to-xml xml-namespaces

以下LINQ to XML C#代码创建一个XElement,其中一个XAttribute

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

它生成一个内联命名空间,生成以下具有p1:

的XML元素
<Worksheet p1:Name="Sheet1" xmlns:p1="ss" />

但我真正想要的是:

<Worksheet ss:Name="Sheet1" />

如何获取元素的第二种形式?

注意:如果您认识到XML结构,我会填写Excel电子表格,但这是该问题的轶事。

最终我在以下Excel文档中创建了Worksheet元素:

<?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 个答案:

答案 0 :(得分:1)

我必须将我的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);

生成所需的 ss:名称 XML属性:

<Worksheet ss:Name="Sheet1"