tengo una entrada de cadena de la que necesito para extraer información sencilla, aquí está el código XML de muestra (de mkyong):XML no análisis de cadenas como entrada con el saxofón
<?xml version="1.0"?>
<company>
<staff>
<firstname>yong</firstname>
<lastname>mook kim</lastname>
<nickname>mkyong</nickname>
<salary>100000</salary>
</staff>
<staff>
<firstname>low</firstname>
<lastname>yin fong</lastname>
<nickname>fong fong</nickname>
<salary>200000</salary>
</staff>
</company>
Cómo analizarlo dentro de mi código (tengo un campo String name
en mi clase):
public String getNameFromXml(String xml) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean firstName = false;
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase("firstname")) {
firstName = true;
}
}
public void characters(char ch[], int start, int length) throws SAXException {
if (firstName) {
name = new String(ch, start, length);
System.out.println("First name is : " + name);
firstName = false;
}
}
};
saxParser.parse(xml.toString(), handler);
} catch (Exception e) {
e.printStackTrace();
}
return name;
}
estoy un java.io.FileNotFoundException
y veo que está tratando de encontrar un archivo myprojectpath + the entireStringXML
Qué am Estoy haciendo mal?
Addon:
Aquí es mi método principal:
public static void main(String[] args) {
Text tst = new Text("<?xml version=\"1.0\"?><company> <staff> <firstname>yong</firstname> <lastname>mook kim</lastname> <nickname>mkyong</nickname> <salary>100000</salary> </staff> <staff> <firstname>low</firstname> <lastname>yin fong</lastname> <nickname>fong fong</nickname> <salary>200000</salary> </staff></company>");
NameFilter cc = new NameFilter();
String result = cc.getNameFromXml(tst);
System.out.println(result);
}
alguna razón en particular por la que no puede escribir la cadena XML en un archivo XML y extrae de esa manera? –
@Kamron K. sí, porque estoy escribiendo una función definida por el usuario de la colmena (https://cwiki.apache.org/Hive/languagemanual-udf.html). Escaneo un montón de registros en una base de datos no relacional y cada registro tiene un pequeño fragmento de xml almacenado en un registro. –