簡體   English   中英

使用最佳方式編寫XML(Linq To XML或其他)

[英]Write XML using best way(Linq To XML or other)

我想用以下格式寫我的xml。 我該怎么辦?我正在使用C#

<map borderColor='c5e5b8' fillColor='6a9057' numberSuffix=' Mill.' includeValueInLabels='0' labelSepChar=': ' baseFontSize='9' showFCMenuItem='0'
hoverColor='c2bc23' showTitle='0' type='0' showCanvasBorder='0' bgAlpha='0,0' hoveronEmpty='1' includeNameInLabels='0' showLabels='1'>
<!--toolText='Alaska'imageSave='1' imageSaveURL='Path/FusionChartsSave.aspx or FusionChartsSave.php'-->
<data>
<entity id='AL' value='AL' link="JavaScript:FilterClientProjectList('AL');" fontBold='1' showLabel='0' />
<entity id='AK' value='AK' link="JavaScript:FilterClientProjectList('AK');" fontBold='1' hoverColor='6a9057'/>
<entity id='AZ' value='AZ' link="JavaScript:FilterClientProjectList('AZ');" fontBold='1'/>
</data>

<styles>
<definition>
<style name='MyFirstFontStyle' type='font' face='Verdana' size='11' color='0372AB' bold='1' bgColor='FFFFFF' />
</definition>
<application>
 <apply toObject='Labels' styles='' />
</application>
</styles>
</map>

提前致謝..

我將使用LINQ to SQL(假定為mydatasource的SQL),然后使用LINQ to XML,然后使用XSLT來獲取您要查找的確切XML。

這是一個示例:我的XML

<Promotions> 
      <Promotion> 
        <Category>Arts &amp; Entertainment</Category> 
        <Client>Client 1</Client> 
        <ID>2</ID> 
        <Title>Get your Free 2</Title> 
      </Promotion> 
      <Promotion> 
        <Category>Community &amp; Neighborhood</Category> 
        <Client>Client1</Client> 
        <ID>4</ID> 
        <Title>Get your Free 4</Title> 
      </Promotion> 
      <Promotion> 
        <Category>Community &amp; Neighborhood</Category> 
        <Client>Client 1</Client> 
        <ID>5</ID> 
        <Title>Get your Free 5</Title> 
      </Promotion> 
      <Promotion> 
        <Category>Community &amp; Neighborhood</Category> 
        <Client>Client 2</Client> 
        <ID>1</ID> 
        <Title>Get your Free 1</Title> 
      </Promotion> 
      <Promotion> 
        <Category>Education</Category> 
        <Client>Client 3</Client> 
        <ID>3</ID> 
        <Title>Get Your Free 3</Title> 
      </Promotion> 
      <Promotion> 
        <Category>Home &amp; Garden</Category> 
        <Client>Client 4</Client> 
        <ID>6</ID> 
        <Title>Get your Free 6</Title> 
      </Promotion> 
    </Promotions> 

我的代碼:

 PromotionsDataContext db = new PromotionsDataContext();
                        //load sql into XML for tree view js control
                        XElement Categories =
                            new XElement("Promotions",
                                from b in db.Promotion_GetPromotions()
                                select new XElement("Promotion",
                                    new XElement("Category", b.CategoryName),
                                       new XElement("Client", b.ClientName),
                                       new XElement("ID", b.ID),
                                       new XElement("Title", b.Title)));

                        XDocument mydoc = new XDocument();
                        mydoc.Add(Categories);

                        try
                        {

                        // Load the style sheet.
                        XslCompiledTransform xslt = new XslCompiledTransform();
                        xslt.Load(@"C:\TransList.xslt");

                        // Execute the transform and output the results to a writer.
                        StringWriter sw = new StringWriter();
                        //XsltSettings mysettings = new XsltSettings();
                        XmlWriterSettings mysettings = new XmlWriterSettings();

                        xslt.Transform(mydoc.CreateReader(), null, sw);

我的XSLT文件:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:asp="http://schemas.microsoft.com/ASPNET/20">


  <xsl:output method="html" indent="yes" />

  <xsl:key name="categories" match="Category" use="." />
  <xsl:key name="client" match="Client" use="." />
  <xsl:key name="title" match="Title" use="." />

  <xsl:template match="/">

    <ul id="red" class="treeview-red">
      <xsl:for-each select="/Promotions/Promotion/Category[  
                generate-id(.) = generate-id(key('categories', .)[1])  
                ]">
        <li>
          <span>
            <xsl:value-of select="."/>
            <!--Category-->
          </span>

          <ul>
            <xsl:call-template name="category-client">
              <xsl:with-param name="category" select="."/>
              <!--Client-->
            </xsl:call-template>
          </ul>
        </li>

      </xsl:for-each>
    </ul>

  </xsl:template>

  <xsl:template name="category-client">
    <xsl:param name="category" />
    <xsl:for-each select="/Promotions/Promotion[Category=$category]/Client[  
                generate-id(.) = generate-id(key('client', .)[1]) 
                ]">
      <li>
        <span>
          <xsl:value-of select="."/>
        </span>
        <ul>
          <xsl:call-template name="category-client-title">
            <xsl:with-param name="category" select="$category"/>
            <!--Title-->
            <xsl:with-param name="client" select="."/>
          </xsl:call-template>
        </ul>
      </li>
    </xsl:for-each>
  </xsl:template>

  <xsl:template name="category-client-title">
    <xsl:param name="category" />
    <xsl:param name="client" />
    <xsl:for-each select="/Promotions/Promotion[Category=$category]/Title[  
                generate-id(.) = generate-id(key('title', .)[1]) 
                ]">
      <li>
        <span>
          <asp:LinkButton ID ="LinkButton{../ID}" runat="server" OnClick="LinkClicked" Text="{.}">
          </asp:LinkButton>
        </span>
      </li>

    </xsl:for-each>

  </xsl:template>

</xsl:stylesheet>

這是在C#中使用XSLT時發現的一些東西:

我在這里做錯了什么,使用C#遇到XSLT問題

如何在XSLT中按標簽名稱檢索同級?

XSLT呈現&gt; 和&lt; 對於> <我該如何解決?

如果我有一個可以廣泛使用Xml的項目,那么我總是創建一個VB項目。 您可以像下面這樣聲明示例xml:

Dim sampleXml = 
<Promotions> 
      <Promotion> 
        <Category>Arts &amp; Entertainment</Category> 
        <Client>Client 1</Client> 
        <ID>2</ID> 
        <Title>Get your Free 2</Title> 
      </Promotion> 
      <Promotion> 
        <Category>Client 1</Category> 
        <Client>Artsquest</Client> 
        <ID>4</ID> 
        <Title>Get your Free 4</Title> 
      </Promotion> 
      <Promotion> 
        <Category>Client 1</Category> 
        <Client>Artsquest</Client> 
        <ID>5</ID> 
        <Title>Get your Free 5</Title> 
      </Promotion> 
      (....)

並檢索以下內容:

Dim firstPromotion = sampleXml.Promotions.Promotion(0)

或類似的東西。

即使我有一個C#項目,我也會創建一個VB dll項目來使用xml。 它比您在C#中要做的newXElement東西干凈得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM