繁体   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