Tôi có một đầu vào chuỗi từ mà tôi cần phải trích xuất thông tin đơn giản, đây là xml mẫu (từ mkyong):Xml không phân tích cú pháp String như đầu vào với sax
<?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>
Làm thế nào tôi phân tích nó trong mã của tôi (tôi có một lĩnh vực String name
trong lớp học của tôi):
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;
}
tôi nhận được một java.io.FileNotFoundException
và tôi thấy rằng nó đang cố gắng để tìm một tập tin myprojectpath + the entireStringXML
gì am Tôi làm sai?
Addon:
Đây là phương pháp chính của tôi:
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);
}
bất kỳ lý do đặc biệt tại sao bạn không thể viết chuỗi xml vào một tập tin xml và phân tích như vậy? –
@Kamron K. yes, bởi vì tôi đang viết hàm xác định người dùng hive (https://cwiki.apache.org/Hive/languagemanual-udf.html). Tôi quét loạt các bản ghi trong cơ sở dữ liệu không quan hệ và mỗi bản ghi có một chút xml nhỏ được lưu trữ trong một bản ghi. –