Avatar billede mungojerrie Nybegynder
21. februar 2005 - 14:07 Der er 15 kommentarer og
1 løsning

gåseøjne i streng

Hej

Har et ret dumt og muligvis let problem, har bare ikke kunnet finde en løsning, er ny til C#

Jeg vil gerne kunne gemme nogle strenge :

http://rep.oio.dk/ubl/xml/schemas/0p71/pip/;
xmlns:com="http://rep.oio.dk/ubl/xml/schemas/0p71/common/";
xmlns:main="http://rep.oio.dk/ubl/xml/schemas/0p71/maindoc/";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="http://rep.oio.dk/ubl/xml/schemas/0p71/pip/ http://rep.oio.dk/ubl/xml/schemas/0p71/pip/piplax.xsd\";

i en streng igen.

public static string nameSpaceURI = "http://rep.oio.dk/ubl/xml/schemas/0p71/pip/\" ";
public static string nameSpaceURI_COM = "xmlns:com=\"http://rep.oio.dk/ubl/xml/schemas/0p71/common/\" ";
public static string nameSpaceURI_MAIN = "xmlns:main=\"http://rep.oio.dk/ubl/xml/schemas/0p71/maindoc/\" ";
public static string nameSpacesURI_XSI = "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
public static string nameSpaceURI_SCHEMA = "xsi:schemaLocation=\"http://rep.oio.dk/ubl/xml/schemas/0p71/pip/ http://rep.oio.dk/ubl/xml/schemas/0p71/pip/piplax.xsd\"";

Jeg kan fint få lov til at gemme den, men når strengen bliver udskrevet via denne metode:

public static string getAllNameSpaces(){
    StringBuilder sb = new StringBuilder();
    sb.Append(nameSpaceURI);
    sb.Append(nameSpaceURI_COM);
    sb.Append(nameSpaceURI_MAIN);
    sb.Append(nameSpacesURI_XSI);
    sb.Append(nameSpaceURI_SCHEMA);
    return sb.ToString();

}

får jeg " i stedet for "

Nogle gode ideer ??
Avatar billede arne_v Ekspert
21. februar 2005 - 14:09 #1
Der er vist ikke getAllNameSpaces som gør det men der hvor du
skriver det ud som XML.
Avatar billede mungojerrie Nybegynder
21. februar 2005 - 14:31 #2
okay, jeg laver mit dokument sådan her :

public static XmlDocument getXmlDocument(){
    XmlDocument doc = new XmlDocument();
    XmlDeclaration decl = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
    XmlElement root = doc.DocumentElement;
    doc.InsertBefore(decl, root);
    XmlElement HeadElement = doc.CreateElement("", "Invoice", getAllNameSpaces());
    doc.AppendChild(HeadElement);
    return doc;
}

tilhøjer elementer sådan her:

public void appendObjectsToDoc(XmlDocument doc){
    XmlNode root = doc.DocumentElement;

    //<com:ID>200500001</com:ID>
    XmlElement e_ID = doc.CreateElement("com", "ID", getAllNameSpaces());
    e_ID.InnerText = InvoiceID;
    root.AppendChild(e_ID);
    ...............

og til sidst gemmer jeg dokumentet med :

doc.Save(filnavn);
Avatar billede arne_v Ekspert
21. februar 2005 - 14:37 #3
Det kan du næppe gøre på den måde.

Men jeg ved ikke lige hvordan  det så skal gøres.
Avatar billede mungojerrie Nybegynder
21. februar 2005 - 14:40 #4
hvad mener du der kan være et problem ved min fremgangsmåde ?
Avatar billede arne_v Ekspert
21. februar 2005 - 14:46 #5
Det 3. argument til CreateElement er beregnet til en forekost af det som
står mellem "".
Avatar billede mungojerrie Nybegynder
21. februar 2005 - 14:51 #6
ja, men der skal jo netop ikke noget prefix på min "Invoice" element......
Avatar billede jtbroad Nybegynder
21. februar 2005 - 15:45 #7
Avatar billede mungojerrie Nybegynder
21. februar 2005 - 15:48 #8
jtbroad : duer desværre ikke :-(
Avatar billede jtbroad Nybegynder
21. februar 2005 - 16:28 #9
sådan her måske:

xmlns:com = @"http:"+"/"+"/"+@"rep.oio.dk/ubl/xml/schemas/0p71/common/";

giver http://rep.oio.dk/ubl/xml/schemas/0p71/common/

hvis man sætter det over i en string ihvertfald
Avatar billede arne_v Ekspert
21. februar 2005 - 21:44 #10
Her er en forkert måde at gøre det på som jeg tror virker:

using System;
using System.Xml;

class MainClass
{
    public static void Main(string[] args)
    {
        XmlDocument doc = new XmlDocument();
        XmlElement root = doc.CreateElement("all");
        root.SetAttribute("xmlns:a", "http://www.a.org/a");
        root.SetAttribute("xmlns:b", "http://www.b.org/b");
        doc.AppendChild(root);
        XmlElement e1 = doc.CreateElement("one");
        e1.AppendChild(doc.CreateTextNode("Første element"));
        root.AppendChild(e1);
        XmlElement e2 = doc.CreateElement("one");
        e2.AppendChild(doc.CreateTextNode("Andet element"));
        root.AppendChild(e2);
        doc.Save(Console.Out);
    }
}

resultat:

<?xml version="1.0" encoding="IBM437"?>
<all xmlns:a="http://www.a.org/a" xmlns:b="http://www.b.org/b">
  <one>Forste element</one>
  <one>Andet element</one>
</all>
Avatar billede mungojerrie Nybegynder
21. februar 2005 - 21:53 #11
hmm, jeg vil jo gerne kunne skrive:

<?xml version="1.0" encoding="ISO-8859-1"?>
<root xmlns="http://www.a.org/a">
    <a:one>100</a:one>
    <a:two>100</a:two>
</root>

og det kan jeg ikke med denne kode i hvert fald......

XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("all");
root.SetAttribute("xmlns:a", "http://www.a.org/a");
root.SetAttribute("xmlns:b", "http://www.b.org/b");
doc.AppendChild(root);
XmlElement e1 = doc.CreateElement("a", "one", null);
e1.AppendChild(doc.CreateTextNode("Første element"));
root.AppendChild(e1);
XmlElement e2 = doc.CreateElement("a", "two", null);
e2.AppendChild(doc.CreateTextNode("Andet element"));
root.AppendChild(e2);
doc.Save(Console.Out);
Avatar billede arne_v Ekspert
21. februar 2005 - 22:05 #12
Har du overvejet at skifte til XmlTextWriter og selv styre det hele ?
Avatar billede mungojerrie Nybegynder
22. februar 2005 - 07:29 #13
ja, det har jeg skam, men synes ikke lige det gjorde specielt meget nemmere.....
Avatar billede mungojerrie Nybegynder
22. februar 2005 - 08:53 #14
har prøvet dette:

XmlTextWriter w = new XmlTextWriter(Console.Out);
string n = TransVikali.nameSpaceURI;  //http://rep.oio.dk/ubl/xml/schemas/0p71/pip/;
w.Formatting = Formatting.Indented;
w.WriteStartElement("Invoice");
w.WriteStartAttribute("com", null, n);
w.WriteStartElement("com", "ID", n);
w.WriteString("test");
w.WriteEndElement();
w.WriteEndElement();
w.Close();

output:

<Invoice com:="" xmlns:com="http://rep.oio.dk/ubl/xml/schemas/0p71/pip/&quot; ">
  <com:ID>test</com:ID>
</Invoice>

og det er jo ikke helt rigtig!! :-(
Avatar billede mungojerrie Nybegynder
22. februar 2005 - 11:44 #15
Så fandt jeg en løsning jeg kan bruge....den er ikke helt pæn, men den virker:

string nameSpaceURI_COM = "http://rep.oio.dk/ubl/xml/schemas/0p71/common/";

public static XmlDocument getXmlDocument(){
    XmlDocument doc = new XmlDocument();
    XmlDeclaration decl = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
    doc.InsertBefore(decl, doc.DocumentElement);
    string xmlData = "<Invoice xmlns='http://rep.oio.dk/ubl/xml/schemas/0p71/pip/' xmlns:com='http://rep.oio.dk/ubl/xml/schemas/0p71/common/' xmlns:main='http://rep.oio.dk/ubl/xml/schemas/0p71/maindoc/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://rep.oio.dk/ubl/xml/schemas/0p71/pip/ http://rep.oio.dk/ubl/xml/schemas/0p71/pip/piplax.xsd'></Invoice>";
    doc.Load(new StringReader(xmlData));
    return doc;
}

public void appendObjectsToDoc(XmlDocument doc){
    XmlNode root = doc.DocumentElement;

    //<com:ID>200500001</com:ID>
    XmlElement e_ID = doc.CreateElement("com", "ID", nameSpaceURI_COM);
    e_ID.InnerText = InvoiceID;
    root.AppendChild(e_ID);       
    .....
}
Avatar billede mungojerrie Nybegynder
22. februar 2005 - 11:44 #16
I får tak for hjælpen alle sammen :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester