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>Ähtä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: Ähtäri, Aulanko, Rauma
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
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
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ä arvo 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ä...
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)
Aihe on jo aika vanha, joten et voi enää vastata siihen.