Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Siam en Diciembre 05, 2016, 01:41:25 PM

Título: Cargar XML
Publicado por: Siam en Diciembre 05, 2016, 01:41:25 PM
Estoy intentando cargar un XML que esta en la misma ruta que el script que lo intenta cargar.
 
 
 

      string name = "1.xml";
   xDoc.Load(name);

 
 
 
Pero da este error
 
NullReferenceException: Object reference not set to an instance of an object

selIdioma.cargarIdioma () (at Assets/Scripts/UI/Idioma/selIdioma.cs:14)

principalController.Start () (at Assets/Scripts/UI/home/principalController.cs:32)
 
Al estar en la misma ruta no valdria solo con poner el nombre ?
Título: Cargar XML
Publicado por: lightbug en Diciembre 05, 2016, 03:00:37 PM
Hola, esto tengo yo para cargar datos xml en un objeto de una clase serializable:
 

public bool ExistXMLProfile(int profile)
{
   string path = Application.dataPath + "/ProfileData/" + "profile" + profile.ToString() + ".xml";
   if (!File.Exists (path)) {
      return false;
   } else {
      return true;
   }
}
 
public void LoadDataXML(int profile)
{
   string path = Application.dataPath + "/ProfileData/" + "profile" + profile.ToString() + ".xml";
   XmlSerializer serializer = new XmlSerializer( typeof(DataXML));
   FileStream fileStream = new FileStream( path , FileMode.Open );
   dataXML = (DataXML)serializer.Deserialize (fileStream);
   fileStream.Close();
 
}

 
que es el "xDoc" tuyo?, si tu xml esta en Assets (el directorio base de datos) tenes que poner "Application.DataPath/...." ,eso si, tenes que indicar toda la ruta. Ah y primero verificar que exista, sino puede haber nulls dando vueltas. (En el ejemplo anterior lo verifico en otro lado, no en LoadDataXML)
Título: Cargar XML
Publicado por: Siam en Diciembre 05, 2016, 05:00:15 PM

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml;
public static class selIdioma  {
static XmlDocument xDoc ;
public static void cargarIdioma()
{
   string name = preferencias.pref.idioma + ".xml";
   xDoc.Load(Application.dataPath + "/Scripts/UI/Idioma/"+name);
}
public static string cargarTexto (string tag, string nodo )
{
   XmlNodeList tagSel = xDoc.GetElementsByTagName(tag);
   return ((XmlElement)tagSel[0]).GetElementsByTagName(nodo)[0].InnerText;
}
}

 
El xDoc es donde csargo el XML, lo unico que quiero es coger el texto del XML, esto lo uso para tener 2 idiomas (o los que sean).
 
 
 
Y lo llamo asi
 

selIdioma.cargarIdioma ();

 
 
Título: Cargar XML
Publicado por: lightbug en Diciembre 05, 2016, 05:47:05 PM
La verdad no sabia que asi se podian cargar xml ni conocia los xmlnodes. Yo de xml la verdad no manejo mucho, segui paso a paso el libro "Pro Unity Game Development with C#" de Alan Thorn para cargar datos del juego y fue bastante bien (sorprendentemente).
 
Funciona como está ahora o no?
 
 
Título: Cargar XML
Publicado por: iRobb en Diciembre 05, 2016, 06:27:40 PM
La estructura final de la app no es la estructura de árbol que ves en el editor de Unity. Solamente se puede acceder a los directorios "Resources" y "StreamingPath". Para acceder a ellos depende parcialmente del SO final que utilices en tu app (Windows, Android, iOS, ...).
 
Me da la impresión que lo tratas como un exe de Windows de hace unas cuántas versiones.
Título: Cargar XML
Publicado por: Siam en Diciembre 06, 2016, 01:19:26 PM
Y no hay una manera de acceder al XML ?
Título: Cargar XML
Publicado por: lightbug en Diciembre 06, 2016, 09:14:53 PM
Podes acerlo de muchas formas, una es colocandolo dentro de una carpeta Resources (en cualquier lado), luego llamando Resource.Load("archivoXML.xml"), otra es como puse en mi ejemplo, pero para eso una vez que tengas el build tenes que colocar los directorios correspondientes en los lugares que determinastes. En PC, Mac y Linux no hay problema, ya en moviles se complica me parece,
 
Lo Mejor es usar recursos en este caso. No estoy completamente seguro si podes cargar un recurso como un archivo XML (por ej podes cargar un recurso como un GameObject, como una Textura, Sprite , etc)
Título: Cargar XML
Publicado por: Siam en Diciembre 06, 2016, 09:49:00 PM
He creado una carpeta en la raiz de mi proyecto, llamada Resources, dentro los XML y en el script
 

var doc = Resources.Load(name);

 
Pero la variable doc queda nula. La variable name contiene unicamente el nombre del archivo (1.xml). No se si lo estoy haciendo bien.
 
Tambien he probado a colocar la raiz
 

var doc = Resources.Load(Application.dataPath + "/Resources/" + name);

 
Aunque me imagino que asi no es.
Título: Cargar XML
Publicado por: lightbug en Diciembre 06, 2016, 10:12:08 PM
Asi yo cargo un GameObject (Prefabricado):
 

GameObject obj = Resources.Load("Prefab") as GameObject;

 
Despues de una googleada:
 
http://answers.unity3d.com/questions/59466/loading-xml-file-from-resources-file-after-build.html (http://answers.unity3d.com/questions/59466/loading-xml-file-from-resources-file-after-build.html)
 
 
Título: Cargar XML
Publicado por: Siam en Diciembre 07, 2016, 11:23:51 AM
Tengo que aprender a googlear bien, yo estube googlendo y no encontre nada parecido. Funciono perfectamente. Gracias