Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: XML: xsl:sort ja skandit (ä ja ö)

slitzu [16.12.2008 13:07:13]

#

Miten voisin sortata aakkoselliseen järjestykseen poistaen duplikaatit seuraavat elementit:

<b><t>Aulanko</t></b>
<b><t>Aulanko</t></b>
<b><t>Rauma</t></b>
<b><t>&Auml;ht&auml;ri</t></b>

Jos mulla on $unique-listin muodostus näin:

<xsl:variable name="unique-list" select="b[t=not(following::t)]"/>

ja yritän järjestää sen aakkoselliseen järjestykseen <for-each> loopissa <xsl:sort select="t" order="ascending">:lla, tulee järjestys seuraavanlaiseksi: &Auml;ht&auml;ri, Aulanko, Rauma

neau33 [03.01.2009 22:58:25]

#

Moikka slitzu!

kokeiles käyttää tätä...

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns="http://www.w3.org/TR/xhtml1/strict">
<xsl:output method="html" indent="yes" />

ja pukkaa scandit sellasinaan...

Mod. lisäsi kooditagit

Grez [03.01.2009 22:59:58]

#

neau33 kirjoitti:

ja pukkaa scandit sellasinaan...

Neau33 tarkoittaa siis sellaisinaan utf-8 muodossa. Jos ne sattuu olemaan vaikka Latin-1 muodossa niin ne täytyy ensin muuntaa utf-8:ksi tai sitten vaihtaa tuolta utf-8 tilalle iso-8859-1

neau33 [05.01.2009 00:42:13]

#

Moikka taas!

Grez kirjoitti:

Neau33 tarkoittaa siis sellaisinaan utf-8 muodossa.
Jos ne sattuu olemaan vaikka Latin-1 muodossa niin ne täytyy ensin
muuntaa utf-8:ksi tai sitten vaihtaa tuolta utf-8 tilalle iso-8859-1

mutta se mitä Grez kirjoitti ei nyt pidä paikkaansa jos syöttö on Latin-1 muodossa...

Asia on testattavissa vaikkapa näin...

SimppeliXmlEditori.aspx

<%@ Page Language="C#" AspCompat="true" Debug="true" %>
<%@ import Namespace="System.IO" %>
<%@ import Namespace="System.Threading" %>
<%@ import Namespace="System.Xml" %>
<%@ import Namespace="System.Xml.XPath" %>
<%@ import Namespace="System.Xml.Xsl" %>
<script runat="server">

    void Page_Load(object sender, EventArgs e) {
    if (!Page.IsPostBack){
     Page.RegisterStartupScript("SetFocus", "<script>document.getElementById('" + TextBox1.ClientID + "').focus();" + "<" + "/script>");
    }
     Label1.Text = ""; Response.Write("");
    }

    void Button1_Click(object sender, EventArgs e) {
    if (TextBox1.Text !="" & TextBox2.Text !="") {
    XmlDocument doc = new XmlDocument();
    doc.Load(Server.MapPath("testi.xml"));
    XmlNode root = doc.DocumentElement;

    XmlNodeList list = root.SelectNodes("jou");


    int j=0;
    for (int i=0;(i < list.Count);i++) {


    if (list.Item(i).InnerText == TextBox1.Text) {
     list.Item(i).InnerText = TextBox2.Text; j++;
    }

    }
    if (j == 0) {
     if (list.Count == 1) {
       Response.Write("'jou' tagi ei sisältänyt" + "</br>" + "arvoa: " + TextBox1.Text);
       Label1.Text = "<a href='http://localhost/testi.html'>tsekkaa 'jou' tagin arvo</a>";
     }
     else {
       Response.Write("'jou' tagit eivät sisältäneet" + "</br>" + "arvoa: " + TextBox1.Text);
       Label1.Text = "<a href='http://localhost/testi.html'>tsekkaa 'jou' tagien arvot</a>";
     }
     TextBox1.Text = ""; TextBox2.Text = ""; return;
    }
      doc.Save(Server.MapPath("testi.xml"));
     Thread.Sleep(1000);

      string filename = Server.MapPath("testi.xml");
      string stylesheet = Server.MapPath("testi.xslt");
      XslTransform xslt = new XslTransform();
      xslt.Load(stylesheet);
      XPathNavigator xsltNav;
      xslt.Transform(filename, Server.MapPath("testi.html"), null);
      if (j == 1){
       Response.Write("'jou' tagin arvo: " + TextBox1.Text + "</br>" + "vaihdettu arvoksi: " +  TextBox2.Text);
      }
      else{
       Response.Write("'jou' tagien arvot: " + TextBox1.Text + "</br>" + "vaihdettu arvoon: " +  TextBox2.Text);
      }
      Label1.Text = "<a href='http://localhost/testi.html'>testi.html</a>";
      TextBox1.Text = ""; TextBox2.Text = "";
    }
    else {

    if (TextBox1.Text == "" & TextBox2.Text != "") {
      Response.Write("Korvattava arvo puuttuu!");
    }
    else if (TextBox1.Text != "" & TextBox2.Text == "") {
     Response.Write("Korvaava arvo puuttu!");
    }

    else {
      Response.Write("Ei mitään tehtävää!");
    }

    }
    }

</script>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head><body>
    <form runat="server">
        <p font-color="red">
            <strong>SIMPPELI XML EDITORI<br />
            <br />
            Vaihda</strong>
            <br />
            tämä&nbsp;arvo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tähän arvoon<br />
            <asp:TextBox id="TextBox1" tabIndex="1" runat="server" Width="82px"></asp:TextBox>
            <asp:TextBox id="TextBox2" tabIndex="2" runat="server" Width="83px"></asp:TextBox>
            <asp:Button id="Button1" onclick="Button1_Click" tabIndex="3" runat="server" Text="Anna palaa"></asp:Button>
            <br />
            <asp:Label id="Label1" runat="server" forecolor="Black"></asp:Label>
            <br />
        </p>
    </form>
</body></html>

testi.xslt

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns="http://www.w3.org/TR/xhtml1/strict">
<xsl:output method="html" indent="yes" />
<xsl:template match="/">

  <html>
    <body>
      <b>jou tagit:</b><br></br>
      <xsl:apply-templates select="data" />
     <a href="http://localhost/testi.xml">testi.xml</a><br></br>
     <a href="http://localhost/SimppeliXmlEditori.aspx">SimppeliXmlEditori.aspx</a><br></br>
    </body>
  </html>
</xsl:template>
<xsl:template match="data">
 <xsl:apply-templates/>
</xsl:template>
<xsl:template match="juttu">
 <br><xsl:value-of select="jou" /></br>
</xsl:template>
</xsl:stylesheet>

testi.xml

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<data>
  <jou>ååå</jou>
  <juttu>340</juttu>
  <jou>456</jou>
  <juttu>341</juttu>
  <jou>789</jou>
  <juttu>342</juttu>
  <jou>015</jou>
  <juttu>343</juttu>
  <jou>015</jou>
  <juttu>344</juttu>
</data>

web.config

<?xml version="1.0" encoding="UTF-8" ?>

<configuration>

   <appSettings>
     <add key="root" value='Server.MapPath()'/>
   </appSettings>

  <system.web>

          <sessionState mode="InProc" cookieless="true" timeout="20" />

             <authentication mode="Windows">
                <forms name="*.*" timeout="999999" />
             </authentication>

            <authorization>
               <allow users="*" />
            </authorization>

  </system.web>

</configuration>

testi.html

<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head><body>
    <b>jou tagit:</b>
    <br>ååå<br>456<br>789<br>015<br>015<br><a href="http://localhost/testi.xml">testi.xml</a><br><a href="http://localhost/SimppeliXmlEditori.aspx">SimppeliXmlEditori.aspx</a><br></body>
</html>

testaa arvojen vaihtamista syötellen tilalle ääkkosiä...

Grez [05.01.2009 01:55:47]

#

neau33 kirjoitti:

mutta se mitä

Grez kirjoitti:

ei nyt pidä paikkaansa jos syöttö on Latin-1 muodossa...

Asia on testattavissa vaikkapa näin...

Siis voisitko vähän tarkentaa, että mikä osa viestiäni ei mielestäsi pitänyt paikkaansa?

Sanoin vaan itsestäänselvyyden, että jos tiedostossa olevat skandit ei ole utf-8-koodattuja, niin content-encoding arvoksi ei kannata laittaa "utf-8", vaan se mitä koodausta oikeasti on käytetty.

Kokeilin myös tuota esimerkkikoodiasi, ja ihan yhtä hyvin se tuntuu toimivan laitoimpa tiedostot sitten iso-8859-1 tai utf-8 muodossa (siis kunhan sekä tiedostossa olevien merkkien koodaus, että encoding-parametri ovat samoja)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta