2012-12-19 40 views
6

Tôi khá mới với thế giới lập trình, vì vậy câu hỏi này có thể ngớ ngẩn, nhưng tôi bị kẹt và hy vọng sẽ nhận được sự trợ giúp.sử dụng ký tự ':' trong XDocument để tạo Excel - C#

Tôi đang sử dụng XDocument để thay đổi và thêm thông tin vào trang tính Excel (là tài liệu XML), trong một dự án để lấy báo cáo Excel ra khỏi Autodesk Revit. Các tài liệu bảng tính bao gồm các thông tin bảng tính bao gồm các hàng và các tế bào trong cấu hình này:

<row r="11" spans="1:11" x14ac:dyDescent="0.2"> 
    <c r="A11" s="198" t="inlineStr"> 
     <is> 
      <t>example</t> 
     </is> 
    </c> 
    <c r="B11" s="199" t="inlineStr"> 
     <is> 
      <t>string</t> 
     </is> 
    </c> 
    <c r="C11" s="200"/> 
    <c r="D11" s="201"/> 
    <c r="E11" s="201"/> 
    <c r="F11" s="202"/> 
    <c r="G11" s="203"/> 
    <c r="H11" s="204"/> 
    <c r="I11" s="205"/> 
    <c r="J11" s="205"/> 
    <c r="K11" s="206"/> 
</row> 

Phần liên quan của mã này là trong phần tử liên tiếp. Thuộc tính kéo dài có giá trị là "1:11" và đó là vấn đề của tôi. Nó sẽ không cho phép tôi nhập ký tự ':' làm giá trị của thuộc tính. Tôi đã tìm kiếm trên mạng và thấy rằng nó có liên quan đến việc khai báo không gian tên tại liên kết này: "The ':' character, hexadecimal value 0x3A, cannot be included in a name"

Tuy nhiên, việc nhận giá trị thuộc tính này là bắt buộc đối với hoạt động của Excel tài liệu. Tôi tạo phần tử hàng như sau:

XElement row = new XElement("row", 
        new XAttribute("r", i.ToString()), 
        new XAttribute("spans", "1:" + collumnCount.ToString()), 
        new XAttribute("x14ac:dyDescent", "0.2")); 

Tôi không hiểu tại sao nó không cho phép tôi đặt ':' vào giá trị của thuộc tính XAttribute vì đây chỉ là một chuỗi. Có cách nào để thực hiện công việc này không?

Tôi đã thử thêm chuỗi "1:11" vào XMLAttribute, sử dụng XMLDocument. Điều này không làm việc, nhưng tôi không thể tin rằng nó không thể với XDocument.

Cảm ơn trước

+4

Nó không phải là ** Giá trị thuộc tính ** của 'spans' đó là đem lại cho bạn lỗi này, nó tên thuộc tính ** ** 'x14ac: dyDescent'. Bạn sắp bước vào thế giới tuyệt vời của không gian tên xml ... chúc may mắn :) – AakashM

+0

ow, tôi hiểu rồi ... Ngu ngốc của tôi :) Cảm ơn bạn, thưa bạn, vì phản ứng nhanh của bạn! – jasperdesmet

+3

Ôi trời ơi, tại sao câu hỏi này vẫn mở? @AakashM nên đặt câu trả lời này như một câu trả lời. –

Trả lời

0

Bạn nên bao gồm : trong tên nguyên tố của bạn. Nó bây giờ được cho phép. Nếu bạn thấy ai đó làm điều đó, thì : không phải là một phần của tên phần tử, đó là dấu phân cách giữa không gian tên và tên phần tử. Vì vậy, để có được các tập tin XML sau đây:

<rss xmlns:media="http://m.xyz.com/rss/" version="2.0"> 
    <channel vendor="ABC" lastpublishdate="05/12/2013 01:02"/> 
    <title>Videos</title> 
    <media:thumbnail width="180" height="75" /> 
</rss> 

Bạn phải viết một cái gì đó như:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string x = "55"; 

      XNamespace aw = "http://m.xyz.com/rss/"; 
      XDocument document = new XDocument(
       new XDeclaration("1.0", "utf-8", "yes"), 
       new XElement(
        "rss", 
        new XAttribute(XNamespace.Xmlns + "media", "http://m.xyz.com/rss/"), 
        new XAttribute("version", "2.0"), 

        new XElement("channel", 
         new XAttribute("vendor", "ABC"), 
         new XAttribute("lastpublishdate", DateTime.Now.ToString("dd/MM/yyyy hh:mm"))), 

         new XElement("title", "Videos"), 
         new XElement(
          aw + "thumbnail", 
          new XAttribute("width", x.Trim()), 
          new XAttribute("height", x.Trim()) 
         ) 
       ) 
      ); 
     } 
    } 
} 
Các vấn đề liên quan