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.